Android(安卓)异步获取网络图片Bitmap资源
16lz
2021-01-26
这里主要是为了把获取图片的代码单独出来和UI分开,方便扩展。
public interface Callback<T> { public void onSuccess(T obj);public void onError(String error);}
线程执行结束后,回调接口,成功后调用onSuccess方法T为通用类型参数,错误调用onError
public class GetBitmapResControl {private Activity activity;public GetBitmapResControl(Activity activity) {this.activity = activity;}public void doGetBitmap(final String url, final Callback<ImageView> callBack) {new Thread() {public void run() {byte b[] = null;try {String _data = getImageData(url);//我这里的测试图片传入的是base64内容格式的.if (_data != null) {b = Base64Util.decode(_data);}} catch (Exception e) {e.printStackTrace();}final Bitmap bitmap = BitmapFactory.decodeByteArray(b, 0, b.length);activity.runOnUiThread(new Runnable() {public void run() {if (bitmap == null) {callBack.onError("获取图片失败");} else {ImageView img = new ImageView(activity);img.setImageBitmap(bitmap); callBack.onSuccess(img);
}}});};}.start();} //获取网络中的图片内容private String getImageData(String url) throws ClientProtocolException, IOException { Log.d("getImageData", "URL:" + url);org.apache.http.client.HttpClient client = new DefaultHttpClient();HttpGet httpget = new HttpGet(url);HttpResponse httpResponse = client.execute(httpget);int status = httpResponse.getStatusLine().getStatusCode();if (status == HttpStatus.SC_OK) {Log.d("getImageData", "status:" + status);String strResult = EntityUtils.toString(httpResponse.getEntity());return strResult;}return null;}}
在Activity 中调用
new GetBitmapResControl(this).doGetBitmap("http://x.x.x.x/server/getimg?id=12", new Callback<ImageView>() {@Overridepublic void onSuccess(ImageView obj) {rootView.addView(obj);}@Overridepublic void onError(String error) {Toast.makeText(getApplicationContext(), error, Toast.LENGTH_SHORT).show();}});
更多相关文章
- Android(安卓)4.2短信发送流程小记
- android 自定义ViewAnimator文字轮播广告控件——自定义控件学习
- Android(安卓)DeepLink
- Android(安卓)stdio 3.0以上版本将图片文件存入模拟器教程
- android 获取apk签名的序列号
- android如何将生成的图片保存至手机相册并显示出来
- 下载Android(安卓)源码
- Android基本组件介绍和生命周期
- android fih-mms的实现