我正在开发一个应用程序,其中我需要将asynctask的onPostExecute方法的结果的值发送到上一个活动,即调用aync任务的活动.pls放置一些代码。感谢Anyhelp
答案 0 :(得分:8)
两种方式:
如果我是你,我会按照第一个选项 看看DOCS:
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
而不是{{ 1}}
答案 1 :(得分:2)
如果你的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);
}
}
}
答案 2 :(得分:1)
onPostExecute方法在主UI线程上触发,因此AsyncTasks调用者已经在那里完成了所有操作。
http://developer.android.com/reference/android/os/AsyncTask.html
答案 3 :(得分:1)
在OnPostExecute中触发一个事件。
答案 4 :(得分:0)
这是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
}
}
如果我们想在多个站点使用相同的AsynTask类,我们可以使用这种类型的实现,而不是使用嵌套类实现。