ユーザーの友達の写真を取得して、友達の名前の横にある 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 から直接取得されるため、読み込みに時間がかかります。
どうすれば修正できますか、キャッシュのように保存することを考えていますが、その方法がわかりません。どんな助けでも大歓迎です。