如何将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)
有任何建议如何做到这一点? : - )
到目前为止感谢!
答案 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