最近开发时遇到了打开一个界面时,需要联网下载一个网络图片,但是这个图片也不一定一成不变,索性我下载好图片,直接就在UI界面中显示出来,【也没有作缓存、图片保存在本地之类的】,也就是说每次打开这个界面都会更新新的图片。今天记录下来,供有同样简单暴力需求的朋友使用。
特别简单的例子,直接发出来代码:
异步下载图片类:
package us.cloudhawk.client.net;
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 us.cloudhawk.client.Constants;
import us.cloudhawk.client.utils.ToolsUtil;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
public class AgentLogoLoader extends AsyncTask<String, Integer, Bitmap> {
public Context context;// Context上下文
private String path;// 图片路径
private int width;// 图片宽度
private int height;// 图片高度
private onLogoDownloadListener listener;
private static final String TAG = AgentLogoLoader.class.getSimpleName();
/** 自定义一个接口,在需要下载图片的UI类中实现此接口 */
public static interface onLogoDownloadListener {
void getLogoBitmap(Bitmap bitmap);
}
public AgentLogoLoader(Context context, String path,
onLogoDownloadListener listener) {
this.context = context;
this.path = Constants.BASE_URL + path;//http://www.baidu.com/image/dwadkwajda/134wd.jpg
this.listener = listener;
width = 222;
height = 78;
}
@Override
protected Bitmap doInBackground(String... params) {
URL imageUrl = null;
HttpURLConnection conn = null;
Bitmap bitmap = null;
InputStream is = null;
BufferedInputStream bis = null;
try {
if (Constants.DEBUG)
Log.d(TAG, "START TO DOWNLOAD: " + path);
imageUrl = new URL(path);
conn = (HttpURLConnection) imageUrl.openConnection();
is = conn.getInputStream();
bis = new BufferedInputStream(is);
bitmap = BitmapFactory.decodeStream(bis);
/* 改变头像大小 */
//bitmap = ToolsUtil.createBitmapBySize(bitmap, width, height);
/* 下载成功 */
if (Constants.DEBUG)
Log.d(TAG, "SUCCESS: " + path);
return bitmap;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
@Override
protected void onPostExecute(Bitmap result) {
if (listener != null) {
listener.getLogoBitmap(result);
}
}
}
UI界面类:
public class test implements OnClickListener,
OnItemClickListener,onLogoDownloadListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.app_subscription_receipt);
new AgentLogoLoader(this, mAgent.agent_logo_path, this).execute();
}
@Override
public void getLogoBitmap(Bitmap bitmap) {
if (bitmap != null) {
BitmapDrawable drawable = new BitmapDrawable(bitmap);
agentLogo.setImageDrawable(drawable);
agentLogo.invalidate();
}
}
}
如果需要一个带缓存,更完整的异步加载工具类,我提供一个传送门,别人写的更完善一些:
http://blog.youkuaiyun.com/geniusxiaoyu/article/details/7470163