AsyncTask将List返回给Activity

时间:2013-07-11 14:32:20

标签: android android-asynctask android-activity

如何将AsyncTask中生成的List返回给Activity?

我的LoadStringsAsync类:

public class LoadStringsAsync extends AsyncTask<Void, Void, List<String> > {

    List<String> str;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        ...
    }

    @Override
    protected List<String> doInBackground(Void... arg0) {
        ...
        get content from the internet
        and
        fill the list
        ...
    }

    @Override
    protected void onPostExecute(List<String> str) {
        super.onPostExecute(events);
        ...

    }
}

我需要在我的Activity中使用List才能使用它。 (不仅仅是在ListView中显示它:P)

有任何建议如何做到这一点? : - )

到目前为止感谢!

5 个答案:

答案 0 :(得分:9)

您的活动

public class YourActivity extends Activity {
    private List<String> list = new ArrayList<String>();

    public void onCreate(Bundle state) {
        //...
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    private void fireYourAsyncTask() {
        new LoadStringsAsync(this).execute();
    }

}    

<强>的AsyncTask

public class LoadStringsAsync extends AsyncTask<Void, Void, List<String>> {

    List<String> str;
    private YourAcitivity activity;

    public LoadStringsAsync(YourAcitivity activity) {
        this.activity = activity;
    }

    @Override
    protected List<String> doInBackground(Void... arg0) {
    }

    @Override
    protected void onPostExecute(List<String> str) {
        super.onPostExecute(events);
        activity.setList(str);
    }
}

答案 1 :(得分:2)

如果你的AsyncTask是Activity中的内部类,那么onPostExecute将与Activity在同一个上下文中,你可以像在Activity中的任何地方一样使用List。

如果你没有在你的Activity中使你的AsyncTask成为内部类,那么你需要设置一个监听器,以便在AsyncTask完成时回调你的Activity。如果您更喜欢走这条路,请查看this post

还有this post与您的问题类似。

答案 2 :(得分:2)

根据android link的文档,您可以使用get方法返回计算结果。由于您的AsyncTask显示您正在返回List,因此您可以在要调用异步类的类中尝试以下代码

List<String> returnedlist=new LoadStringAsync().execute().get();

希望此选项有所帮助。

答案 3 :(得分:0)

onPostExecute()内放置使用该列表的代码,或将其设置为变量。

更好地从父活动中运行您的任务,如:

public class MyActivity extends Activity{
  private List<String> mData = new ArrayList<String>();


  private void runTask(){
    new LoadStringsAsync(){

      @Override
      protected void onPostExecute(List<String> str) {
        super.onPostExecute(events);
        mData.clear();
        mData.addAll(str);
      }

    }.execute();
  }
}

答案 4 :(得分:0)

您可以将列表发送到消息中的处理程序:

Message msg = Message.obtain();
msg.obj = myList;
handler.sendMessage(msg);

更多信息:http://developer.android.com/reference/android/os/Message.html