您的位置:首页 > 其它

010_02带缓存的图片查看器

2015-05-20 11:05 148 查看
  第一次连接网络下载图片后,将在本机/data/data/...下保存图片;第二次打开应用程序点击“获取图片”将直接从本机缓存获取。

缓存图片保存位置如下:



MainActivity.java

package com.example.day10_02getpicturebycache;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

final static int MSG_DOWNLOAD_OK =1;
final static int MSG_DOWNLOAD_ERROR =2;

Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//针对message进行处理
switch (msg.what) {
case MSG_DOWNLOAD_OK:
ImageView iv= (ImageView) findViewById(R.id.iv_pic);
iv.setImageBitmap((Bitmap)msg.obj);
break;
case MSG_DOWNLOAD_ERROR:
Toast.makeText(MainActivity.this, "下载失败", 1).show();
break;
default:
break;
}
}
};

public void getpicture(View v){
File file = new File(getCacheDir(), "zy.jpg");
if(file.exists()) {
Bitmap bm =new BitmapFactory().decodeFile(file.getAbsolutePath());
ImageView iv= (ImageView) findViewById(R.id.iv_pic);
iv.setImageBitmap(bm);
}
else {
//下面的整个代码是从网络url下载对应的数据
Thread tread = new Thread(){
public void run() {
String path = "http://192.168.3.30:8080/tomcat.gif";
try {
URL url = new URL(path);
HttpURLConnection  conn = (HttpURLConnection) url.openConnection();
//set paramter 3
conn.setReadTimeout(5000);
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
// pending;
conn.connect();

if (conn.getResponseCode()==200) {
InputStream is = conn.getInputStream();
//如何放到缓存?
File file = new File(getCacheDir(), "zy.jpg");
FileOutputStream fos = new FileOutputStream(file);
byte[] b =new byte[1024];
int len=0;
while ((len=is.read(b))!=-1) {
fos.write(b, 0, len);
}
is.close();
fos.close();

//从一个保存的cache文件中,去得到一个bitmap对象。
Bitmap bm = new BitmapFactory().decodeFile(file.getAbsolutePath());

Message msg = handler.obtainMessage();
msg.what = MSG_DOWNLOAD_OK;
msg.obj  = bm;
handler.sendMessage(msg);

}
else {
Message msg = handler.obtainMessage();
msg.what =MSG_DOWNLOAD_ERROR;
handler.sendMessage(msg);
//Toast.makeText(this, "下载失败", 1).show();
}
}catch (Exception e) {
e.printStackTrace();
}
};
};
tread.start();
}
}
}


activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="hello_world" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="获取图片"
android:onClick="getpicture"/>
<ImageView
android:id="@+id/iv_pic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
></ImageView>
</LinearLayout>


AndroidManifest.xml中权限设置:

<uses-permission android:name="android.permission.INTERNET"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: