1

在我的应用程序中,当应用程序执行某些操作时,我有一个 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 完成。

4

1 回答 1

0

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

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

特别是异步任务

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

这里解释的很好。。

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

在正确的轨道上?

--

于 2012-08-10T02:18:04.937 回答