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
- GridView使用AsyncTask模拟异步加载大量图片
- 使用AsyncTask异步加载图片
- GridView加载大量图片
- 利用AsyncTask高效异步加载图片,适用于ListView 和GridView
- 异步加载图片AsyncTask
- AsyncTask异步加载图片
- AsyncTask异步加载图片
- Android有效加载图片 之 使用AsyncTask异步加载图片
- Android完美解决GridView异步加载图片和加载大量图片时出现OOM
- 使用LruCache为GridView加载大量sdcard的图片
- Android 异步加载图片-AsyncTask
- Android 异步加载图片-AsyncTask
- AsyncTask异步加载图片示例
- ListView数据异步加载图片和使用AsyncTask优化
- 使用AsyncTask异步更新UI界面(加载网络图片)
- 利用LruCache为GridView异步加载大量网络图片完整示例
- 利用LruCache为GridView异步加载大量网络图片完整示例
- 对一个gridview异步加载大量图片的实例的个人理解
- Rejection sampling 笔记
- java服务器端配置支持跨域请求
- Material Design
- java之装饰模式
- 未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序解决办法 (转的下次就知道了)
- GridView使用AsyncTask模拟异步加载大量图片
- xUtils3
- jvm内存模型和内存分配
- ssh应用
- QWebView加载本地Html文件
- Windows Driver Samples剖析之Echo (一)
- Map的new为什么是Map map=new HashMap();而不是new Map();?因为map是个接口,而接口不能被实例化!HashMap是map接口的实现类!
- 爬虫资料整理(持续更新中)
- 【转】关于div层的间隙, 还有img与div的间隙