public class MainActivity extends Activity {
Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
ImageView iv = (ImageView) findViewById(R.id.image);
// 设置一个位图的方法
iv.setImageBitmap((Bitmap) msg.obj);
break;
case 2:
Toast.makeText(MainActivity.this, "请求超时", 1).show();
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void on(View view) {
final String path = "http://192.168.1.10:8080/Image/meinv.jpg";
final File file=new File(getCacheDir(),filename(path));
//判断是否有缓存 if(file.exists()){
System.out.println("从缓存获取");
//获取本地图片的地址
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
// 创建一个消息对象
Message msg = new Message();
// 要在消息处理器里使用的变量
msg.obj = bitmap;
// 消息的状态
msg.what = 1;
// 发送消息
handler.sendMessage(msg);
}else{
Thread t = new Thread() {
public void run() {
System.out.println("从网络获取");
try {
// 获取网络地址
URL url = new URL(path);
// 创建链接
HttpURLConnection conn = (HttpURLConnection)
url.openConnection();
// 设置请求方式
conn.setRequestMethod("GET");
// 设置链接超时
conn.setConnectTimeout(8000);
// 设置读取超时
conn.setReadTimeout(8000);
// 提交请求
conn.connect();
// 判断请求码
if (conn.getResponseCode() == 200) {
// 获取服务器传来流
InputStream in = conn.getInputStream();
//添加缓存
byte[] b=new byte[1024];
int len;
FileOutputStream fos=new FileOutputStream(file);
while ((len=in.read(b))!=-1) {
fos.write(b, 0, len);
}
fos.close();
// 把图片封装在bitemap里
//Bitmap bitmap = BitmapFactory.decodeStream(in);
//获取本地缓存图片地址
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
// 创建一个消息对象
Message msg = new Message();
// 要在消息处理器里使用的变量
msg.obj = bitmap;
// 消息的状态
msg.what = 1;
// 发送消息
handler.sendMessage(msg);
} else {
// 发送空消息,不过要传一个消息状态给他
handler.obtainMessage(2);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
};
t.start();
}
}
//获取图片名称的方法
public String filename(String path){
//获取"/"号后面的图片名称
int index=path.lastIndexOf("/");
//把图片名称坐标转换成String类型,并返回
return path.substring(index);
}
}