我正在尝试获取用户的朋友图片并将它们显示在朋友姓名旁边的 ListView 中。
我不知道我是否正确地实现了代码,但是当我运行我的项目时,我只得到好友列表名称,而 ImageView 显示为空?它没有显示任何东西。
这是我的代码,对不起,如果我在这里做错了,我还在学习:
这是我的自定义 ArrayAdapter:
objects[] 参数是一个包含所有用户好友名称的数组,
而 pics[] 是一个包含用户好友头像的 Bitmap 数组。
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);
}
}
我在 requestListener 的 onComplete 方法中有这个,这是进行 FB.request("me/friends") 调用的方法。
Friends.this.runOnUiThread(new Runnable(){
@Override
public void run() {
new FImageLoader().execute(friendsarray,friendsp);
}
});
真的是一堆代码,希望有人能帮帮我。
编辑:原来,我的friendsp数组,一个包含所有位图图片的数组,被传递为null,我修复了它,现在显示了图片。
现在我有另一个问题,图片需要很长时间才能加载,因为它们是直接从网络上检索的。
我该如何解决这个问题,我正在考虑将它们保存在缓存中,但我真的不知道如何做到这一点。任何帮助表示赞赏。