android listview从网络获取图片及文字显示,ListView获取网络图片并且缓存

package com.example.xinwen;

import java.util.List;

import android.content.Context;

import android.content.Intent;

import android.content.DialogInterface.OnClickListener;

import android.net.Uri;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.AdapterView;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.TextView;

import android.widget.Toast;

public class shipeiqi extends BaseAdapter {

private List mlist;

private LayoutInflater mflater;

private imageloader mImageloader;

public shipeiqi(Context context , List data){

mlist = data;

mflater = LayoutInflater.from(context);

mImageloader=new imageloader();

}

// private void OnItemClick(AdapterView> pratnt, View view,

// int position, long id) {

//

// 点击事件

@Override

public int getCount() {

// TODO 自动生成的方法存根

return mlist.size();

}

@Override

public Object getItem(int position) {

// TODO 自动生成的方法存根

return mlist.get(position);

}

@Override

public long getItemId(int position) {

// TODO 自动生成的方法存根

return 0;

}

@Override

public View getView(int position, View con, ViewGroup arg2) {

viewholder aa = null;

if (con==null) {

aa = new viewholder();

con=mflater.inflate(R.layout.item, null);

aa.tupian=(ImageView) con.findViewById(R.id.tupian);

aa.neirong=(TextView) con.findViewById(R.id.wenben);

aa.biaoti=(TextView) con.findViewById(R.id.biaoti);

con.setTag(aa);

}else{

aa=(viewholder) con.getTag();

}

aa.tupian.setImageResource(R.drawable.ic_launcher);

String url =mlist.get(position).newstupian;

aa.tupian.setTag(url);//图片不符解决

//new imageloader().showtupianthread(aa.tupian, mlist.get(position).newstupian);

mImageloader.showImageByAsyncTask(aa.tupian, url);

aa.biaoti.setText(mlist.get(position).newsbiaoti);

aa.neirong.setText(mlist.get(position).newsneirong);

return con;

}

class viewholder{

public TextView biaoti,neirong;

public ImageView tupian;

}

}

package com.example.xinwen;

import java.io.BufferedInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

import android.R.integer;

import android.R.string;

import android.annotation.TargetApi;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.AsyncTask;

import android.os.Build;

import android.os.Handler;

import android.os.Message;

import android.support.v4.util.LruCache;

import android.widget.ImageView;

public class imageloader {

private ImageView mimageView;

private String murl;

private LruCache mCache;

public imageloader(){

int maxMemory = (int) Runtime.getRuntime().maxMemory();//获取最大可用内存

int cacheSize = maxMemory/4;

mCache = new LruCache(cacheSize){

@Override

protected int sizeOf(String key, Bitmap value){

//每次存入缓存的时候调用

return value.getByteCount();

}

};

}

//增加到缓存

public void addBitmapToCache(String url,Bitmap bitmap){

if (getBitmapfromCache(url)==null) {

mCache.put(url, bitmap);

}

}

//从缓冲中获取数据

public Bitmap getBitmapfromCache(String url){

return mCache.get(url);

}

public Handler mhandler= new Handler(){

public void handleMessage(Message msg) {

super.handleMessage(msg);

if(mimageView.getTag().equals(murl)){//图片刷新多次解决办法

mimageView.setImageBitmap((Bitmap) msg.obj);//图片刷新多次解决办法

}///图片刷新多次解决办法

}

};

public void showtupianthread(ImageView tupianImageView , final String url) {

mimageView = tupianImageView;

murl =url; //图片刷新多次解决办法

new Thread(){

@Override

public void run() {

super.run();

Bitmap bitmap = getBitmapURL(url);

Message message = Message.obtain(); //obtain获得

message.obj=bitmap;

mhandler.sendMessage(message);

}

}.start();

}

public Bitmap getBitmapURL(String urlString){

Bitmap bitmap;

URL url;

InputStream is = null;

try {

url = new URL(urlString);

HttpURLConnection connection = (HttpURLConnection) url.openConnection(); //固定格式

is = new BufferedInputStream(connection.getInputStream());

bitmap = BitmapFactory.decodeStream(is); //bitmap Factory 制造 decodeStream破译流

connection.disconnect(); //释放资源

return bitmap;

} catch (MalformedURLException e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

} catch (IOException e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}finally{

try {

is.close();

} catch (IOException e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}

}

return null;

}

public void showImageByAsyncTask(ImageView imageView,String url) {

//从缓存中取出对应的图片

Bitmap bitmap = getBitmapfromCache(url);

//如果缓冲中没有 必须去下载

if (bitmap==null) {

new newsAsyncTask(imageView,url).execute(url);

}else{

imageView.setImageBitmap(bitmap);

}

}

class newsAsyncTask extends AsyncTask{

private ImageView mImageView;

private String murl;

public newsAsyncTask(ImageView imageView,String url){

mimageView = imageView;

murl=url;

}

@Override

protected Bitmap doInBackground(String... params) {

String url= params[0];

//从网络上获取图片

Bitmap bitmap = getBitmapURL(url);

//如果没有必须从网络上下载

if (bitmap!=null) {

//将不再缓存的图片加入缓存

addBitmapToCache(url, bitmap);

}

return bitmap;

}

@Override

protected void onPostExecute(Bitmap bitmap) {

// TODO 自动生成的方法存根

super.onPostExecute(bitmap);

mimageView.setImageBitmap(bitmap);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值