当前位置: 首页 > 面试题库 >

从Android中的AsyncTask返回值

谷梁镜
2023-03-14
问题内容

一个简单的问题:是否可以返回in的值AsyncTask

//AsyncTask is a member class
private class MyTask extends AsyncTask<Void, Void, Void>{

    protected Void doInBackground(Void... params) {
         //do stuff
         return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        //do stuff
        //how to return a value to the calling method?
    }
}

然后在我的Activity/ Fragment

// The task is started from activity
myTask.execute()
// something like this?
myvalue = myTask.getvalue() 

编辑:这是很久以前我不熟悉Java的地方问的,现在我对它有了更好的了解,我将做一个简短的总结:

异步任务的要点是该任务为asynchronous,这意味着调用execute()该任务后,该任务将在其自己的线程上开始运行。从asynctask返回一个值将毫无意义,因为原始的调用线程已经进行了其他工作(因此该任务是异步的)。

考虑时间:在某个时间点,你启动了一个将与主线程并行运行的任务。当并行运行任务完成时,主线程上的时间也已过去。并行任务无法及时返回以将值返回到主线程。

我来自C,所以对此我不太了解。但是似乎很多人都在问同样的问题,所以我想我会澄清一下。


问题答案:

为什么不调用处理该值的方法?

public class MyClass extends Activity {

    private class myTask extends AsyncTask<Void, Void, Void> {

        //initiate vars
        public myTask() {
            super();
            //my params here
        }

        protected Void doInBackground(Void... params) {
            //do stuff
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            //do stuff
            myMethod(myValue);
        }
    }

    private myHandledValueType myMethod(Value myValue) {
        //handle value 
        return myHandledValueType;
    }
}


 类似资料:
  • 问题内容: 如何从AsyncTask中获取数据?我的MainActivity正在调用触发AsyncTask的DataCall.getJSON函数,但是我不确定如何将数据返回到原始Activity。 调用DataCall的MainActivity应该返回一个字符串并将其保存在 数据通话: 问题答案: 对我来说,关键是创建一个名为URLWithParams的类或其他类,因为AsyncTask将只允许发

  • 为什么我的异步任务返回NULL?它以前工作得很好。我做错了什么? 这是我的代码。 日志类别08-22 09:51:04.279 113 59-11359/com.example.android.top10Music E/AndroidRuntime:致命异常:主进程:com.example.android.top10Music,PID:11359java.lang.nullPointerExcep

  • 问题内容: 我有一些EditText,用户可以输入ftp地址,用户名,密码,端口和testConnection按钮。如果成功建立连接,它将返回布尔值true。 我正在重新编写代码以使用AsyncTasks执行各种ftp操作,但是,如果连接成功,如何传递布尔值? 还有我的AsyncTask 问题答案: 如果myMethod从onPostExecute内部代码调用,它将在UI线程上运行。否则,你需要通

  • 我创建了一个扩展AsyncTask的AsynTaskInsideActivity类 位置\u id 我想从每一列中提取记录。因此,为了存储每个列的每个记录,我创建了四个类型数组(即每列一个),并成功地将检索到的光标数据存储在每个数组中。现在,问题是我需要返回每一列的记录。因此,具体地说,我如何从one-AsyncTask类返回这四个单独的List-type数组。目前,我只返回列表类型的数组,即lo

  • 问题内容: 我正在使用具有以下签名的类: 我正试图通过其他班级来称呼它: 但是在这里我得到这个错误: 为什么在Class扩展行中将我指定为第三个参数? 问题答案: 您可以通过对返回的AsyncTask调用AsyhncTask的get()方法来获得结果,但是当它等待获取结果时,它将把它从异步任务变成同步任务。 由于您的AsyncTask位于单独的类中,因此您可以创建一个接口类并在AsyncTask中

  • 问题内容: 我想使用AsyncTask从服务器获取Ftp文件夹列表,并将文件夹名称ArrayList返回到主类并更新微调适配器。 在主班我有带适配器的微调器 在AsyncTask中: 那么我应该如何用主类中的ArrayList替换AsyncTask中的arraylist并动态更新Spinner Updater? 问题答案: 您已经将ArrayList 设为 static ,也将其设为public。