0

ユーザーの友達の写真を取得して、友達の名前の横にある ListView に表示しようとしています。
コードを正しく実装しているかどうかはわかりませんが、プロジェクトを実行すると、フレンドリストの名前しか取得できず、ImageView は空に見えますか? 何も表示されません。

これが私のコードです。ここですべて間違っている場合は申し訳ありませんが、まだ学習中です。

これは私のカスタム ArrayAdapter です。

objects[] パラメータはすべてのユーザーの友達の名前
を含む配列で、pics[] はユーザーの友達のプロフィール写真を含むビットマップ配列です。

public MyAdapter(Context context, int resource, int textViewResourceId, String[] objects, Bitmap[] pics) {
    super(context, resource, textViewResourceId, objects);
    c = context;
    res = resource;
    viewresourceid= textViewResourceId;
    this.objects = objects;
    this.pics = pics;
}
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      LayoutInflater inflater = (LayoutInflater)
      c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
      View rowView = inflater.inflate(R.layout.friendslistlayout, parent, false);
      TextView fname = (TextView) rowView.findViewById(R.id.friendname);
      ImageView fpic = (ImageView) rowView.findViewById(R.id.friendpic);
     return rowView;
}

AsyncTask クラスを使用すると、ListView の更新と遅延の問題を処理できることをどこかで読みました。これを作成し、ユーザーの友達の名前 (f) とユーザーの友達の写真 (p) を送信し、上記のアダプターを呼び出します。

public class FImageLoader extends AsyncTask<Object[],Void,FriendsAdapter>{

    @Override
    protected FriendsAdapter doInBackground(Object[]... params) {

        String[] f = (String[]) params[0];
        Bitmap[] p = (Bitmap[]) params[1];

        FriendsAdapter FRIENDS = new FriendsAdapter(Friends.this,R.layout.friendslistlayout,R.id.friendname,f,p);
        return FRIENDS;
    }

    @Override
    protected void onPostExecute(FriendsAdapter o){
        o.notifyDataSetChanged();
        friends.setAdapter(o);
    }
}

これは、FB.request("me/friends") 呼び出しを行う requestListener の onComplete メソッドにあります。

Friends.this.runOnUiThread(new Runnable(){
                @Override
                public void run() {
                    new FImageLoader().execute(friendsarray,friendsp);
                }

            });

それは本当にたくさんのコードです。誰かが私を助けてくれることを願っています。

編集:すべてのビットマップ画像を含む私のfriendsp配列にnullが渡されていたことが判明しました。修正したところ、画像が表示されました。

ここで別の問題が発生しました。画像は Web から直接取得されるため、読み込みに時間がかかります。
どうすれば修正できますか、キャッシュのように保存することを考えていますが、その方法がわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

1

githubのUniversal Image Loader ライブラリをご覧ください。URL から画像をダウンロードしてキャッシュすることができます。このプロジェクトのソースは、独自のキャッシュを作成する場合の出発点として適しています。サンプル プロジェクトにはListView の例が付属しています。ライブラリはSergey Tarasevichによって書かれました。

同様の機能を提供するFedor Vlasovによる LazyListもあります: URL から非同期的に画像をダウンロードしてキャッシュすることができます。Universal Image Loader は LazyList に基づいています。

于 2012-05-04T04:05:12.627 に答える