我正在开发一个应用程序,在其中需要将asynctask的onPostExecute方法的结果发送到先前的活动中,即调用异步任务的活动。请提供一些代码。任何帮助都将不胜感激。
我正在开发一个应用程序,在其中需要将asynctask的onPostExecute方法的结果发送到先前的活动中,即调用异步任务的活动。请提供一些代码。任何帮助都将不胜感激。
有两种方法:
如果我是你,我会选择第一种方法。
看看文档:
class MyActivitySubclass extends Activity {
function runOnPostExecute(){
// whatever
}
private class MyTask extends AsyncTask<Void, Void, Void> {
void doInBackground(Void... params){
// do your background stuff
}
void onPostExecute(Void... result){
runOnPostExecute();
}
}
}
注意 1
放置在onPostExecute
函数体内的代码已经在Activity线程上运行,你只需提到this
关键字指代MyTask.this
而不是MyActivitySubclass.this
如果你的AsyncTask是一个内部类,你可以直接从onPostExecute()
中调用你的活动中的方法:
public class MyActivity extends Activity {
public void someMethod(String someParam) {
// do something with string here
}
public class InnerTask extends AsyncTask<...> {
protected void onPostExecute(result) {
someMethod(Send parameters);
}
}
}
onPostExecute方法在主UI线程上触发,因此在那里执行的任何操作已经在AsyncTasks调用者上了。
http://developer.android.com/reference/android/os/AsyncTask.html
这是对Marek Sebera的答案的补充,他指出要使用处理程序。为了保持代码简单和直观,请使用接口。这不是陌生的概念,我们经常用于回调函数(例如:OnClickListner等)。代码将如下所示。
public class InnerTask extends AsyncTask<...>
{
interface ResultHandler
{
void gotResult(<> result);
}
private ResultHandler myResult;
//constructor
public InnerTask(....params...,ResultHandler callback)
{
...
this.myResult = callback;
}
protected void onPostExecute(<>result)
{
...
myResult.gotResult(result);
}
}
public class MyActivity extends Activity implements InnerTask.ResultHandler
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
//do something
//if you want the InnerTask to execute here
InnerTask i = new InnerTask(....params...,this); //send 'this' as parameter
i.execute();
}
@Override
public void gotResult(<> result)
{
//from onPostExecute
}
}
onPostExecute
的用途。 - Marek Sebera