Android sdcard实现图片存储 、联网下载
本文实例介绍了sdcard存储图片下载简单操作,分享给大家供大家参考,具体内容如下
步骤--在配置清单添加完联网权限后
1、res/layout界面布局
<LinearLayoutxmlns: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"> <ImageView android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <Button android:id="@+id/bt_download" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="图片下载" android:onClick="Image_Download"/> </LinearLayout>
2、有2个类一个操作SDCARD的文件工具类(FileUtil)另外一个MainActivity类
FileUtil类
//操作SDCARD的文件工具类
publicclassFileUtil{
privatestaticfinalStringCACHE_DIR=Environment.getExternalStorageDirectory()+"/my_caches/images";
privatestaticintCOMP_JPG=0;
privatestaticintCOMP_PNG=1;
//判断sdcard是否挂载(是否有sdcard)
publicstaticbooleanisMounted(){
Stringstate=Environment.getExternalStorageState();
returnstate.equals(Environment.MEDIA_MOUNTED);
}
//获取sdcard文件根路径的绝对路径
publicstaticStringgetSDCARD(){
returnEnvironment.getExternalStorageDirectory().getAbsolutePath();
}
//获取文件名
publicstaticStringgetFilename(Stringurl){
returnurl.substring(url.lastIndexOf('/')+1);
}
//保存文件方法1
publicstaticvoidsava1(Stringurl,byte[]data){
//判断是否有sdcard
if(!isMounted()){
return;
}
//有sdcard
//判断是否有缓存文件夹
Filedir=newFile(CACHE_DIR);
if(!dir.exists()){
//不存在缓存文件夹创建文件夹用来保存文件
dir.mkdirs();
}
//把文件数据存到sdcard
Filefile=newFile(dir,getFilename(url));
try{
FileOutputStreamfos=newFileOutputStream(file);
fos.write(data);
fos.close();
}catch(Exceptione){
e.printStackTrace();
}
}
//保存文件方法2
publicstaticvoidsava2(Stringurl,Bitmapbitmap,intformat){
//判断是否有sdcard
if(!isMounted()){
return;
}
Filedir=newFile(CACHE_DIR);
if(!dir.exists()){
dir.mkdirs();
}
//把文件数据写到sdcard
Filefile=newFile(dir,getFilename(url));
try{
FileOutputStreamfos=newFileOutputStream(file);
//把图片文件写入缓存
bitmap.compress((format==COMP_JPG?CompressFormat.JPEG:CompressFormat.PNG),100,fos);
fos.close();
}catch(Exceptione){
e.printStackTrace();
}
}
//读取图片
publicstaticBitmapreadImage(Stringurl){
if(!isMounted()){
returnnull;
}
Filefile=newFile(CACHE_DIR,getFilename(url));
if(file.exists()){
returnBitmapFactory.decodeFile(file.getAbsolutePath());
}
returnnull;
}
//清空缓存目录
publicvoidclearCaches(){
Filedir=newFile(CACHE_DIR);
File[]file_datas=dir.listFiles();
for(Filefile:file_datas){
file.delete();
}
}
}
MainActivity类
publicclassMainActivityextendsActivity{
privateImageViewimageview;
privateStringurl="http://b.hiphotos.baidu.com/image/pic/item/d1160924ab18972bf5f68cc8e0cd7b899f510ae7.jpg";
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.imageview=(ImageView)this.findViewById(R.id.imageview);
//设置默认图片
imageview.setImageResource(R.drawable.ic_launcher);
}
//图片下载按钮点击事件监听
publicvoidImage_Download(Viewview){
//判断本地是否有图片
Bitmapbitmap=FileUtil.readImage(url);
if(bitmap!=null){
imageview.setImageBitmap(bitmap);
}else{
//没有图片就发送联网请求
newMyAsyncTask().execute(url);
}
}
//联网工具类
publicclassMyAsyncTaskextendsAsyncTask<String,Void,byte[]>{
@Override
protectedbyte[]doInBackground(String...params){
HttpGetget=newHttpGet(params[0]);
HttpClientclient=newDefaultHttpClient();
HttpResponseresponse;
try{
response=client.execute(get);
if(response.getStatusLine().getStatusCode()==200){
byte[]data=EntityUtils.toByteArray(response.getEntity());
FileUtil.sava1(params[0],data);
returndata;
}
}
catch(Exceptione){
e.printStackTrace();
}
returnnull;
}
@Override
protectedvoidonPostExecute(byte[]result){
super.onPostExecute(result);
if(result!=null){
Bitmapbitmap=BitmapFactory.decodeByteArray(result,0,result.length);
imageview.setImageBitmap(bitmap);
}
}
}
}
以上就是本文的全部内容,希望对大家学习Android软件编程有所帮助。
