GridView使用AsyncTask模拟异步加载大量图片

 使用AsyncTask<Void,Void,Void>实现加载大量图片时

new GetGridDataTask().execute(null)报错:The method execute(Void[]) is ambiguous for the type MainActivity.GetGridDataTask

我sdk版本是4.4 但是我把sdk换成2.3.3版本是ok的,所以google在3.0以后对AsyncTask做了修改,解决也非常简单,直接在
execute()方法中什么都不写就ok了
改成:new GetGridDataTask().execute();//执行获取数据的任务 就可以了

<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">使用GridView模拟异步加载大量图片:</span>
<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;"><span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">AsyncTask可能存在新开大量线程消耗系统资源和导致应用FC的风险</span>
</span>
<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">package com.app.fantasticbaby;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;


import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;


public class MainActivity extends Activity {
   private GridView asyn_gridview;
   private List<HashMap<String,Object>> mDatas;
   private CustomAdapter adapter;
   private static final int DIALOG_PROGRESS = 0; 
   private ProgressDialog mProgressDialog;
<span style="white-space:pre">	</span>@Override
<span style="white-space:pre">	</span>protected void onCreate(Bundle savedInstanceState) {
<span style="white-space:pre">		</span>super.onCreate(savedInstanceState);
<span style="white-space:pre">		</span>setContentView(R.layout.activity_main);
<span style="white-space:pre">		</span>asyn_gridview = (GridView)findViewById(R.id.asyn_gridview);
<span style="white-space:pre">		</span>mDatas = new ArrayList<HashMap<String,Object>>();
<span style="white-space:pre">		</span>adapter = new CustomAdapter();
<span style="white-space:pre">		</span>asyn_gridview.setAdapter(adapter);
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span> @Override 
<span style="white-space:pre">	</span>protected void onStart () { 
<span style="white-space:pre">		</span>Log.i("onstart", "onstart");
        super.onStart();  
        new GetGridDataTask().execute();//执行获取数据的任务  
    }  
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span> @Override  
<span style="white-space:pre">	</span>    protected Dialog onCreateDialog(int id) {  
<span style="white-space:pre">	</span>        switch (id) {  
<span style="white-space:pre">	</span>        case DIALOG_PROGRESS:  
<span style="white-space:pre">	</span>            mProgressDialog = new ProgressDialog(MainActivity.this);  
<span style="white-space:pre">	</span>            mProgressDialog.setMessage("正在获取数据");  
<span style="white-space:pre">	</span>            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);  
<span style="white-space:pre">	</span>  
<span style="white-space:pre">	</span>            return mProgressDialog;  
<span style="white-space:pre">	</span>  
<span style="white-space:pre">	</span>         
<span style="white-space:pre">	</span>        }  
<span style="white-space:pre">	</span>        return null;  
<span style="white-space:pre">	</span>    }  


<span style="white-space:pre">	</span>@Override
<span style="white-space:pre">	</span>public boolean onCreateOptionsMenu(Menu menu) {
<span style="white-space:pre">		</span>// Inflate the menu; this adds items to the action bar if it is present.
<span style="white-space:pre">		</span>getMenuInflater().inflate(R.menu.main, menu);
<span style="white-space:pre">		</span>return true;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>class CustomAdapter extends BaseAdapter{


<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>public int getCount() {
<span style="white-space:pre">			</span>// TODO Auto-generated method stub
<span style="white-space:pre">			</span>return mDatas.size();
<span style="white-space:pre">		</span>}


<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>public Object getItem(int arg0) {
<span style="white-space:pre">			</span>// TODO Auto-generated method stub
<span style="white-space:pre">			</span>return mDatas.get(arg0);
<span style="white-space:pre">		</span>}


<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>public long getItemId(int arg0) {
<span style="white-space:pre">			</span>// TODO Auto-generated method stub
<span style="white-space:pre">			</span>return arg0;
<span style="white-space:pre">		</span>}


<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>public View getView(int position, View convertView, ViewGroup parent) {
<span style="white-space:pre">			</span>// TODO Auto-generated method stub
<span style="white-space:pre">			</span>ViewHolder holder = null;
<span style="white-space:pre">			</span>if(convertView == null){
<span style="white-space:pre">				</span>convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.grid_item, null);
<span style="white-space:pre">				</span>holder = new ViewHolder();
<span style="white-space:pre">				</span>holder.item_image = (ImageView)convertView.findViewById(R.id.item_image);
<span style="white-space:pre">				</span>holder.item_text = (TextView)convertView.findViewById(R.id.item_text);
<span style="white-space:pre">				</span>convertView.setTag(holder);
<span style="white-space:pre">			</span>}else{
<span style="white-space:pre">				</span>holder = (ViewHolder) convertView.getTag();
<span style="white-space:pre">			</span>}
<span style="white-space:pre">			</span>holder.item_text.setText((String)(mDatas.get(position).get("title")));
<span style="white-space:pre">			</span> Integer id = (Integer) mDatas.get(position).get("pic");
<span style="white-space:pre">			</span>  if(id != null) {  
<span style="white-space:pre">				</span>  holder.item_image.setImageResource(id);  
<span style="white-space:pre">	</span>            }  
<span style="white-space:pre">	</span>            else {  
<span style="white-space:pre">	</span>            <span style="white-space:pre">	</span>holder.item_image.setImageBitmap(null);  
<span style="white-space:pre">	</span>            }  
<span style="white-space:pre">			</span>  AsyncTask task = (AsyncTask) mDatas.get(position).get("task");  
<span style="white-space:pre">	</span>            if(task == null || task.isCancelled()) {  
<span style="white-space:pre">	</span>                Log.d("Test", "" + position);  
<span style="white-space:pre">	</span>                mDatas.get(position).put("task", new GetItemImageTask(position).execute());//执行获取图片的任务  
<span style="white-space:pre">	</span>            }  
<span style="white-space:pre">			</span>return convertView;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>class ViewHolder{
<span style="white-space:pre">		</span>ImageView item_image;
<span style="white-space:pre">		</span>TextView item_text;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>class GetGridDataTask extends AsyncTask<Void,Void,Void>{
<span style="white-space:pre">		</span>protected void onPreExecute () {  
            mDatas.clear();  
            adapter.notifyDataSetChanged();  
              
            showDialog(DIALOG_PROGRESS);//打开等待对话框  
        }  
<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>protected Void doInBackground(Void... params) {
<span style="white-space:pre">			</span>// TODO Auto-generated method stub
<span style="white-space:pre">			</span>try {
<span style="white-space:pre">				</span>Thread.sleep(500);//模拟耗时的网络操作
<span style="white-space:pre">			</span>} catch (InterruptedException e) {
<span style="white-space:pre">				</span>// TODO Auto-generated catch block
<span style="white-space:pre">				</span>e.printStackTrace();
<span style="white-space:pre">			</span>}  
<span style="white-space:pre">			</span> for(int i = 0; i < 200; i++) {  
<span style="white-space:pre">	</span>                HashMap<String, Object> hm = new HashMap<String, Object>();  
<span style="white-space:pre">	</span>                hm.put("title", "Title");  
<span style="white-space:pre">	</span>                mDatas.add(hm);  
<span style="white-space:pre">	</span>            } 
<span style="white-space:pre">			</span>return null;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>
<span style="white-space:pre">		</span>protected void onPostExecute (Void result) {  
            adapter.notifyDataSetChanged();//通知ui界面更新  
            dismissDialog(DIALOG_PROGRESS);//关闭等待对话框  
        }  
<span style="white-space:pre">		</span>
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>class GetItemImageTask extends AsyncTask<Void,Void,Void>{
        
<span style="white-space:pre">		</span>int pos;  
        
        GetItemImageTask(int pos) {  
            this.pos = pos;  
        }  
<span style="white-space:pre">		</span>@Override
<span style="white-space:pre">		</span>protected Void doInBackground(Void... arg0) {
<span style="white-space:pre">			</span>// TODO Auto-generated method stub
<span style="white-space:pre">			</span>try {
<span style="white-space:pre">				</span>Thread.sleep(2000);//模拟耗时的网络操作
<span style="white-space:pre">			</span>} catch (InterruptedException e) {
<span style="white-space:pre">				</span>// TODO Auto-generated catch block
<span style="white-space:pre">				</span>e.printStackTrace();
<span style="white-space:pre">			</span>} 
<span style="white-space:pre">			</span>mDatas.get(pos).put("pic", R.drawable.back1); 
<span style="white-space:pre">			</span>return null;
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>protected void onPostExecute(Void result) {
<span style="white-space:pre">			</span>// TODO Auto-generated method stub
<span style="white-space:pre">			</span> adapter.notifyDataSetChanged();//通知ui界面更新  
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>
<span style="white-space:pre">		</span>
<span style="white-space:pre">		</span>
<span style="white-space:pre">	</span>}
}
</span>
<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">
</span>
<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">
</span>
<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">
</span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值