我有我的主要活动,在那个活动中我有一个私有的AsyncTask类。在我的公共AsyncTask类中,有一个String,我需要在AsyncTask完成后访问我的MainActivity。
如何从主要活动中访问Async Task类中的String?
编辑:我在我的活动的OnCreate中调用AsyncTask
异步任务类(近底部是我需要的字符串):
public class getLikes extends AsyncTask<String, String, String> {
JSONObject obj = null;
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
try {
String jsonUser = fb.request("5027904559");
obj = Util.parseJson(jsonUser);
} catch (FacebookError e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String args) {
// TODO Auto-generated method stub
//I need to use this String elsewhere in my MainActivity
String name = obj.optString("likes");
}
}
这是我需要使用字符串的地方(如果重要的话)
navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons
.getResourceId(0, -1), true, names));
答案 0 :(得分:2)
只需创建一个构造函数,您可以像这样传递一个Observer:
interface TaskCompletionObserver {
taskCompleted(Object result)
}
构造函数看起来像这样:
public GetLikes(TaskCompletionObserver observer){
super();
this.mObserver = observer;
}
然后在onPosteExecute中简单地调用:
mObserver.taskCompleted(whatever_you_want_to_pass);
您的活动应该实现TaskCompletionObserver,并且在taskCompleted的实现中,您可以执行您需要做的事情(例如,更新UI)
然后,您可以将实施扩展到完全合并observer patter
它设计良好,可以保持代码的可维护性和灵活性。