0

Facebookから友達リストを取得してリストビューに入力していますが、リストビューが表示されるまでプログレスバーを追加しようとしていますが、例外が発生しましたが、検索しようとしましたが、問題の解決策が見つかりませんでした。コードは次のとおりです。

public class FriendsProgress extends AsyncTask<Object, Void, Boolean>
    {
        @Override
        protected Boolean doInBackground(Object... Params)
        {
            try
            {
                getFriendList();                                                                    
                friendAdapter = new FriendAdapter(Friends.this, R.layout.activity_friends, friendsList);

                Friends.this.runOnUiThread(new Runnable()
                {
                @Override
                public void run()
                {

                    list.setAdapter(friendAdapter);
                    //list.setOnItemClickListener(EditStaff.this);

                }
                });


            }
            catch (Exception e)
            {
                System.out.println("StaffProgess Exception Caught:"+e.getMessage());
            }
            return Boolean.TRUE;
        }

        @Override
        protected void onPreExecute()
        {

            friendsProgress=new ProgressDialog(Friends.this);
            friendsProgress.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
            friendsProgress.setIndeterminate(true);
            friendsProgress.setMessage("Loading...");       
            friendsProgress.setOwnerActivity(Friends.this);
            friendsProgress.show();

        }

        @Override
        protected void onPostExecute(Boolean Result) 
        {
            friendsProgress.dismiss();
            friendAdapter.notifyDataSetChanged();

        }
    }

getFriendsList関数の実装は次のとおりです。

public void getFriendList(){

        Request request = Request.newMyFriendsRequest(Session.getActiveSession(), new Request.GraphUserListCallback() {

            @Override
            public void onCompleted(List<GraphUser> users, Response response) {
                // TODO Auto-generated method stub

                for(int i=0; i<users.size();i++)
                {
                GraphUser user =    users.get(i);
                Friend objFriend = new Friend();
                objFriend.setFriendID(user.getId());
                objFriend.setFriendName(user.getName());
                Drawable dd =Friends.LoadImageFromWebOperations("http://graph.facebook.com/" + objFriend.getFriendID() + "/picture");
                objFriend.setFriendPic(dd);
                //objFriend.setFriendPic("http://graph.facebook.com/" + objFriend.getFriendID() + "/picture");
                friendsList.add(objFriend);
                //friendAdapter.notifyDataSetChanged();
                Log.d("Friend's Id", objFriend.getFriendID());
                Log.d("Friend's Name", objFriend.getFriendName());
                //Log.d("Friend's Pic", objFriend.getFriendPic());
                Log.d("Friend's List Count", Integer.toString(friendsList.size()));
                }


        }
    });
    Request.executeBatchAsync(request);
4

3 に答える 3

2

をインスタンス化してメソッド内にAdapterリンクしないでください。これは、ワーカースレッドで実行されており、Androidに接続されている操作をワーカースレッドで実行することは許可されていないためです。代わりに、このコードを移動することをお勧めしますListViewdoInBackground()Views

friendAdapter = new FriendAdapter(Friends.this, R.layout.activity_friends, friendsList);

            Friends.this.runOnUiThread(new Runnable()
            {
            @Override
            public void run()
            {

                list.setAdapter(friendAdapter);
                //list.setOnItemClickListener(EditStaff.this);

            }
            });

onPostExecute()メソッドに。これは確かにより良い設計のソリューションです。お役に立てれば。

于 2012-12-26T07:54:23.803 に答える
0

これを試して、

    ProgressDialog dialog;
    protected void onPreExecute()
    {
        dialog = new ProgressDialog(Friends.this);
        dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        dialog.setMax(100);
        dialog.show(); 
    }
于 2012-12-26T07:55:54.473 に答える
0

onPostExecute()次のようにメソッド内でUiスレッドを実行します。

 runOnUiThread(new Runnable() {

            @Override
            public void run() {                                         
                 friendAdapter = new FriendAdapter(Friends.this, R.layout.activity_friends, friendsList);
                 list.setAdapter(friendAdapter);
                 friendsProgress.dismiss();
                 friendAdapter.notifyDataSetChanged();

            }
        });
于 2012-12-26T08:14:17.083 に答える