读书人

项目的小结4、异步加载列表数据

发布时间: 2013-04-07 12:50:11 作者: rapoo

项目的总结4、异步加载列表数据

?

?

2、实现ContactService的业务逻辑:

getContacts():访问服务器上的数据文件(xml),并进行解析;

getImage():获取服务器上的图片资源,并缓存在本地的SD卡上

?

public class ContactAdapter extends BaseAdapter {private List<Contact> data;private int listviewItem;private File cache;LayoutInflater layoutInflater;public ContactAdapter(Context context, List<Contact> data, int listviewItem, File cache) {this.data = data;this.listviewItem = listviewItem;this.cache = cache;layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);}/** * 得到数据的总数 */public int getCount() {return data.size();}/** * 根据数据索引得到集合所对应的数据 */public Object getItem(int position) {return data.get(position);}public long getItemId(int position) {return position;}public View getView(int position, View convertView, ViewGroup parent) {ImageView imageView = null;TextView textView = null;if(convertView == null){convertView = layoutInflater.inflate(listviewItem, null);imageView = (ImageView) convertView.findViewById(R.id.imageView);textView = (TextView) convertView.findViewById(R.id.textView);convertView.setTag(new DataWrapper(imageView, textView));}else{DataWrapper dataWrapper = (DataWrapper) convertView.getTag();imageView = dataWrapper.imageView;textView = dataWrapper.textView;}Contact contact = data.get(position);textView.setText(contact.name);asyncImageLoad(imageView, contact.image);return convertView;}    private void asyncImageLoad(ImageView imageView, String path) {    AsyncImageTask asyncImageTask = new AsyncImageTask(imageView);    asyncImageTask.execute(path);}        private final class AsyncImageTask extends AsyncTask<String, Integer, Uri>{    private ImageView imageView;public AsyncImageTask(ImageView imageView) {this.imageView = imageView;}protected Uri doInBackground(String... params) {//子线程中执行的try {return ContactService.getImage(params[0], cache);} catch (Exception e) {e.printStackTrace();}return null;}protected void onPostExecute(Uri result) {//运行在主线程if(result!=null && imageView!= null)imageView.setImageURI(result);}    }/*private void asyncImageLoad(final ImageView imageView, final String path) {final Handler handler = new Handler(){public void handleMessage(Message msg) {//运行在主线程中Uri uri = (Uri)msg.obj;if(uri!=null && imageView!= null)imageView.setImageURI(uri);}};Runnable runnable = new Runnable() {public void run() {try {Uri uri = ContactService.getImage(path, cache);handler.sendMessage(handler.obtainMessage(10, uri));} catch (Exception e) {e.printStackTrace();}}};new Thread(runnable).start();}*/private final class DataWrapper{public ImageView imageView;public TextView textView;public DataWrapper(ImageView imageView, TextView textView) {this.imageView = imageView;this.textView = textView;}}}

?

?

?

读书人网 >移动开发

热点推荐