从外部类访问AsyncTask中的String

时间:2014-04-26 16:58:21

标签: android android-asynctask

我有我的主要活动,在那个活动中我有一个私有的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));

1 个答案:

答案 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

它设计良好,可以保持代码的可维护性和灵活性。