在ListView中从Facebook获取图片?

时间:2012-05-04 00:33:38

标签: android facebook listview sdk image

我正在尝试获取用户的朋友照片并将其显示在朋友姓名旁边的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(“我/朋友”)的那个。

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

            });

这真的是一堆代码,我希望有人可以帮助我。

编辑:原来,我的friendsp数组,包含所有位图图片的数组,被传递为null,我修复了它,现在显示的是图片。

现在我还有另一个问题,图片需要很长时间才能加载,因为它们是直接从网上检索的。
我怎么能解决这个问题,我正在考虑将它们保存在缓存中,但我真的不知道如何做到这一点。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

查看github上的Universal Image Loader library。它允许您从URL下载图像并缓存它们。如果要编写自己的缓存,此项目的源代码是一个很好的起点。示例项目附带ListView example。该库由Sergey Tarasevich编写。

还有LazyList Fedor Vlasov提供了类似的功能:允许您从网址异步下载图像并缓存它们。 Universal Image Loader基于LazyList。