Android facebook等待AsyncFacebookRunner完成?

时间:2012-06-08 07:45:14

标签: android facebook multithreading

在我的应用程序中,我在应用程序执行操作时显示了ProgressDialog:

mProgressDialog = ProgressDialog.show(
            ((FriendListActivity) ctx).getParent(), "Please wait...",
            "Getting data...", true);
    updateDisplay(true);

在updateDisplay方法中,它执行如下操作:

items = new ArrayList<FriendInfo>();
    fa = new FriendListAdapter(ctx, R.layout.friendlist_item, items);
    setListAdapter(fa);

Thread t = new Thread() {
            public void run() {
                getFriendList(); //This is where the problem occured

                initFriendList();
                handler.post(new Runnable() {
                    public void run() {
                        mProgressDialog.dismiss();
                        fa.notifyDataSetChanged();
                    };
                });
            }
        };
        t.start();

getFriendList()中,我打电话来获取Facebook用户的信息:

AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(
                    facebook);
            mAsyncRunner.request("me/friends&fields=name,picture",
                    new FriendsRequestListener((FriendListActivity) ctx,
                            currentuser));

之后,用户的信息将保存在我的数据库中。 initFriendList();方法(getFriendList()下方)将使用该数据来初始化视图。

问题是我想要initFriendList()等到getFriendList()完成获取数据。但在getFriendList()中,我使用AsyncFacebookRunner,因此initFriendList()将立即运行。如何使initFriendList()等待AsyncFacebookRunner在运行之前完成。

1 个答案:

答案 0 :(得分:0)

我是Android世界的新手,也许这些可以提供帮助?

http://developer.android.com/guide/components/processes-and-threads.html#AsyncTask

特别是ASYNCTASK

  1. 您可以使用泛型指定参数的类型,进度值和任务的最终值。
  2. 方法doInBackground()在工作线程上自动执行。
  3. onPreExecute(),onPostExecute()和onProgressUpdate()都在UI线程上调用。
  4. doInBackground()返回的值将发送到onPostExecute()。
  5. 您可以随时在doInBackground()中调用publishProgress()以在UI线程上执行onProgressUpdate()。
  6. 您可以随时从任何线程取消任务。
  7. 在这里解释得很好..

    http://www.youtube.com/watch?v=uzJmi59b6oI&feature=bf_next&list=PL3B389D29207777C7

    在正确的轨道上?

    -