2012-05-04 145 views
0

我試圖讓用戶的朋友的照片,並顯示他們在一個ListView旁邊的朋友的名字。
我不知道我是否正確實現了代碼,但是當我運行我的項目時,我只獲取好友列表名稱,並且ImageView顯示爲空?它沒有顯示任何東西。從ListView中獲取圖片?

這裏是我的代碼,對不起,如果我在這裏所做的一切錯了,我還在學習:

這是我的自定義ArrayAdapter:

的對象[]參數是一個數組所有用戶的朋友名字
和圖片[]是包含用戶的朋友個人資料圖片的位圖數組。

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); 
    } 
} 

而且我有這個,我在的onComplete方法requestListener,這是FB.request(「我/朋友」)調用的人。

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

      }); 

這真的是一堆代碼,我希望有人能幫助我。

編輯:原來,我的friendsp數組,與所有的位圖圖片,被傳遞null,我修復它,現在圖片顯示。

現在我有另一個問題,圖片需要很長時間才能加載,因爲它們直接從網上檢索。
我該如何解決這個問題,我正在考慮將它們保存在緩存中,但我真的不知道如何做到這一點。任何幫助表示讚賞。

回答

1

看看github上的Universal Image Loader library。它可以讓你從網址下載圖片並緩存它們。如果你想編寫你自己的緩存,這個項目的源碼是一個很好的起點。示例項目附帶ListView example。圖書館由Sergey Tarasevich撰寫。

還有LazyListFedor Vlasov它提供了一個類似的功能:允許你從urls異步下載圖像並緩存它們。 Universal Image Loader基於LazyList。

+0

謝謝,我會看看他們兩個。 – Slacker616