2012-12-27 61 views
1

這是從json獲取圖像的gridview。我成功了。但是當我從服務器獲取它時,它有很多圖像,這意味着來自服務器的所有圖像。我想一次加載的是12張圖片。在gridview中的延遲加載

如何限制要加載的圖像數量?

請幫我簡單介紹一下,因爲我盲目地使用延遲加載。如果下面的代碼不夠用。這裏是完整的源代碼http://pastie.org/5583485

在這個網址中,50是一個圖像加載的數量,我可以通過這個值限制圖像數量,無論我想要什麼。但我只能加載一次,所以我不能加載它。這個URL提供圖像路徑爲json。

String url = "http://xxx.xxx.xxx/card/all/50/0/?token=57LzEsmBeykLbDCD04wTgK9WWV2XjJY0XBdqVU0HQvjIdu5EtTWOT1IQ1AYNwxt6Q5bG6FG73uvzLQSDGAIezwc8VcopEp0s63uzbdVgLSfts0TLmuVDOgyfn4lX"; 

的doInBackground的AsyncTask

public class DownloadJSONFileAsync extends AsyncTask<String, Void, Void> { 

    protected void onPreExecute() { 
     super.onPreExecute(); 
     showDialog(DIALOG_DOWNLOAD_JSON_PROGRESS); 
    } 

    @Override 
    protected Void doInBackground(String... params) { 

     String url = "http://rest.mcolle.com/card/all/50/0/?token=57LzEsmBeykLbDCD04wTgK9WWV2XjJY0XBdqVU0HQvjIdu5EtTWOT1IQ1AYNwxt6Q5bG6FG73uvzLQSDGAIezwc8VcopEp0s63uzbdVgLSfts0TLmuVDOgyfn4lX"; 
     JSONArray data = null; 

     try { 

      JSONObject jsonObject = new JSONObject(getJSONUrl(url)); 

      MyArrList = new ArrayList<HashMap<String, Object>>(); 
      HashMap<String, Object> map; 
      data = jsonObject.getJSONArray("data"); 
      for (int i = 0; i < data.length(); i++) { 
       JSONObject c = data.getJSONObject(i); 
       map = new HashMap<String, Object>(); 

       // Thumbnail Get ImageBitmap To Object 
       map.put("cardimage", (String) c.getString("cardimage")); 
       map.put("ImageThumBitmap",(Bitmap) loadBitmap(c.getString("cardimage"))); 

       map.put("categoryid", (String) c.getString("categoryid")); 

       MyArrList.add(map); 

      } 

     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     return null; 
    } 

    protected void onPostExecute(Void unused) { 
     ShowAllContent(); // When Finish Show Content 
     dismissDialog(DIALOG_DOWNLOAD_JSON_PROGRESS); 
     removeDialog(DIALOG_DOWNLOAD_JSON_PROGRESS); 
    } 

ImageAdpater其中i顯示圖像

public class ImageAdapter extends BaseAdapter { 
    private Context context; 
    private ArrayList<HashMap<String, Object>> MyArr = new ArrayList<HashMap<String, Object>>(); 

    public ImageAdapter(Context c, ArrayList<HashMap<String, Object>> myArrList) { 
     context = c; 
     MyArr = myArrList; 
    } 

    public int getCount() { 
     return MyArr.size(); 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder viewHolder; 
     viewHolder = new ViewHolder(); 

     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.grid_item, null); 
     } 
     viewHolder.categoryCard = (ImageView) convertView.findViewById(R.id.category_card); 

      viewHolder.categoryCard.setImageResource(R.drawable.card_etc); 
      viewHolder.imageView = (ImageView) convertView.findViewById(R.id.imageView1); 

     try { 
      viewHolder.imageView.setImageBitmap((Bitmap) MyArr.get(position).get("ImageThumBitmap")); 
     } catch (Exception e) { 
      viewHolder.imageView.setImageResource(android.R.drawable.ic_menu_report_image); 
     } 

     return convertView; 

    } 

} 

回答

1

您可以使用通用的圖像加載器,

https://github.com/nostra13/Android-Universal-Image-Loader

+0

我看到它alread Ÿ但它並沒有讓我更好。你可以放置一些代碼嗎?就像我上面描述的那樣,我瞎了眼睛。謝謝,萬分感謝 – kongkea

+0

https://dl.dropbox.com/u/68130108/UniversalImageLoaderExample.rar你可以找到一個例子,說明你可以如何使用。 – Talha