【问题标题】:How to wait finished of asynk task for print the output?如何等待异步任务完成以打印输出?
【发布时间】:2014-07-05 09:44:42
【问题描述】:

在我的 MainActivity 中我调用了一个异步任务,然后我调用了一个片段,在这个片段中我必须显示异步任务下载的结果,但是在打印输出之前我必须等待异步任务完成!

-如何等待TASK完成?

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Log.v(TAG, "OnCreate");

        /* make the API call */
        Intent intent = getIntent();
        session = (Session) intent.getSerializableExtra("session");
        String fqlQuery = "select eid,name,description,start_time, pic_big from event where eid in (SELECT eid FROM event WHERE contains("
                + "'{Trento}'" + ")) order by start_time ASC";
        Bundle params = new Bundle();
        params.putString("q", fqlQuery);

        Request request = new Request(session, "/fql", params, HttpMethod.GET,
                new Request.Callback() {
                    public void onCompleted(Response response) {
                        //Log.i(TAG, "Got results: " + response.toString());
                        try {
                            if (response != null) {

                                final JSONObject json = response.getGraphObject().getInnerJSONObject();
                                JSONArray d = json.getJSONArray("data");
                                int l = (d != null ? d.length() : 0);
                                Log.d("Facebook-Example-events Request",
                                        "d.length(): " + l);

                                for (int i = 0; i < l; i++) {
                                    JSONObject o = d.getJSONObject(i);
                                    String id = o.getString("eid");
                                    String title = o.getString("name");
                                    String description = o.getString("description");
                                    String start_time = o.getString("start_time");
                                    String photo = o.getString("pic_big");

                                    EventsHelper f = new EventsHelper();
                                    f.setId(id);
                                    f.setTitle(title);
                                    f.setDescription(description);
                                    f.setStart_time(start_time);
                                    f.setPhoto(photo);
                                    events.add(f);
                                }
                            }
                        } catch (JSONException e) {
                            Log.w("Facebook-Example", "JSON Error in response");
                        }
                    }
                });
        Request.executeBatchAsync(request);



        Fragment fragment = new Fragment_main();
        FragmentManager manager = getFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.add(R.id.content_frame, fragment, "basefragment");
        transaction.addToBackStack(null);
        transaction.commit();

【问题讨论】:

  • 你有任何错误日志然后分享吗?
  • 是的,我不知道在 MainActivity 中启动的异步任务结束之前要在片段类中等待!因为当我在片段中调用 getEvents() 方法时,返回“EventHelper”的 ArrayList 为空,因为 TASK 没有完成!

标签: android asynchronous android-fragments task wait


【解决方案1】:

创建一个扩展 AsyncTask 的类并覆盖 onPostExecute() 函数以定义任务完成后 UI 线程需要发生的事情。

【讨论】:

  • 谢谢!我解决了我的问题,将片段布局的参考发送给 asynkTask,然后在其上打印布局:)
【解决方案2】:

要等待异步任务直到完成,你必须使用 get() 如下,

 Request.executeBatchAsync(request).get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多