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

来源:互联网 发布:java中常用的数据结构 编辑:程序博客网 时间:2024/06/15 22:51

 使用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>

0 0