android从json文件异步加载图片,android 安卓异步加载网络图片,与viewpager结合使用示例...

android 安卓异步加载网络图片,与viewpager结合使用示例

发布时间:2020-07-01 03:54:59

来源:51CTO

阅读:1204

作者:careylwq

【1】异步加载图片类AsyncImageLoaderpackage com.example.testdddleapk.cus;

import java.io.IOException;

import java.lang.ref.SoftReference;

import java.util.HashMap;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.HttpStatus;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.params.CoreConnectionPNames;

import android.graphics.drawable.Drawable;

import android.os.Handler;

import android.os.Message;

/**

* 异步加载图片

*/

public class AsyncImageLoader {

// 软引用,使用内存做临时缓存 (程序退出,或内存不够则清除软引用)

private HashMap> p_w_picpathCache;

public AsyncImageLoader() {

p_w_picpathCache = new HashMap>();

}

/**

* 定义回调接口

*/

public interface ImageCallback {

public void p_w_picpathLoaded(Drawable p_w_picpathDrawable, String p_w_picpathUrl);

}

/**

* 创建子线程加载图片

* 子线程加载完图片交给handler处理(子线程不能更新ui,而handler处在主线程,可以更新ui)

* handler又交给p_w_picpathCallback,p_w_picpathCallback须要自己来实现,在这里可以对回调参数进行处理

* @param p_w_picpathUrl :须要加载的图片url

* @param p_w_picpathCallback:

* @return

*/

public Drawable loadDrawable(final String p_w_picpathUrl,final ImageCallback p_w_picpathCallback) {

//如果缓存中存在图片  ,则首先使用缓存

if (p_w_picpathCache.containsKey(p_w_picpathUrl)) {

SoftReference softReference = p_w_picpathCache.get(p_w_picpathUrl);

Drawable drawable = softReference.get();

if (drawable != null) {

System.out.println("loadDrawable");

p_w_picpathCallback.p_w_picpathLoaded(drawable, p_w_picpathUrl);//执行回调

return drawable;

}

}

/**

* 在主线程里执行回调,更新视图

*/

final Handler handler = new Handler() {

public void handleMessage(Message message) {

System.out.println("handleMessage");

p_w_picpathCallback.p_w_picpathLoaded((Drawable) message.obj, p_w_picpathUrl);

}

};

/**

* 创建子线程访问网络并加载图片 ,把结果交给handler处理

*/

new Thread() {

@Override

public void run() {

Drawable drawable = loadImageFromUrl(p_w_picpathUrl);

// 下载完的图片放到缓存里

p_w_picpathCache.put(p_w_picpathUrl, new SoftReference(drawable));

Message message = handler.obtainMessage(0, drawable);

handler.sendMessage(message);

}

}.start();

return null;

}

/**

* 下载图片  (注意HttpClient 和httpUrlConnection的区别)

*/

public Drawable loadImageFromUrl(String url) {

try {

HttpClient client = new DefaultHttpClient();

client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 1000*15);

HttpGet get = new HttpGet(url);

HttpResponse response;

response = client.execute(get);

if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {

HttpEntity entity = response.getEntity();

Drawable d = Drawable.createFromStream(entity.getContent(),"src");

return d;

} else {

return null;

}

} catch (ClientProtocolException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

//清除缓存

public void clearCache() {

if (this.p_w_picpathCache.size() > 0) {

this.p_w_picpathCache.clear();

}

}

}

【2】 pagerAdapter的instantiateItem方法@SuppressLint("NewApi") @Override

public Object instantiateItem(final ViewGroup container, final int position) {

String url=imgsUrls[position];

Drawable cachedImage = asyncImageLoader.loadDrawable(url, new ImageCallback() {

@SuppressLint("NewApi") public void p_w_picpathLoaded(Drawable p_w_picpathDrawable,String p_w_picpathUrl) {

ImageView img=(ImageView) viewList.get(position).findViewById(R.id.img);

img.setBackground(p_w_picpathDrawable);

container.addView(view);

}

});

return viewList.get(position);

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值