Android开发实现加载网络图片并下载至本地SdCard的方法
本文实例讲述了Android开发实现加载网络图片并下载至本地SdCard的方法。分享给大家供大家参考,具体如下:
package com.example.myimagedemo;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
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.Environment;
import android.os.Handler;
import android.os.Message;
import android.widget.ImageView;
public class MainActivity extends Activity {
private ImageView mImageView;
private String imgPath="http://pic.nipic.com/2007-11-09/200711912453162_2.jpg";
private File cache;//缓存路径
Handler handler=new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
//显示
Bitmap b=(Bitmap)msg.obj;
mImageView.setImageBitmap(b);
//保存至本地
File imgFile=new File(cache,"woca.jpg");
try {
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(imgFile));
b.compress(Bitmap.CompressFormat.JPEG,80,bos);
bos.flush();
bos.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView=(ImageView)findViewById(R.id.mImageView);
//创建缓存路径
//Environment.getExternalStorageDirectory()获取手机内存卡根路径
cache=new File(Environment.getExternalStorageDirectory(),"Test");
if(!cache.exists()){
cache.mkdirs();
}
//耗时操作都要放在子线程操作
//开启子线程获取输入流
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection conn=null;
InputStream is=null;
try {
URL url=new URL(imgPath);
//开启连接
conn=(HttpURLConnection) url.openConnection();
//设置连接超时
conn.setConnectTimeout(5000);
//设置请求方式
conn.setRequestMethod("GET");
//conn.connect();
if(conn.getResponseCode()==200){
is=conn.getInputStream();
Bitmap b=BitmapFactory.decodeStream(is);
//把输入流转化成bitmap格式,以msg形式发送至主线程
Message msg=new Message();
msg.obj=b;
handler.sendMessage(msg);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
//用完记得关闭
is.close();
conn.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
记得在AndroidMenifest.xml文件加入这三个权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
另,可点击此处查看Android权限操作说明
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android图形与图像处理技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
相关文章
Android onMeasure与onDraw及自定义属性使用示例
这篇文章主要介绍了Android onMeasure与onDraw及自定义属性使用示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧2023-02-02
解决Android调用系统分享给微信,出现分享失败,分享多文件必须为图片格式的问题
这篇文章主要介绍了解决Android调用系统分享给微信,出现分享失败,分享多文件必须为图片格式的问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-09-09
为Android应用增加渠道信息 自动化不同渠道的打包过程的使用详解
为了统计渠道信息,就不得不在程序的某个地方加入渠道的信息,然后针对不同的渠道打不同的包。一般可以在Manifest文件中加入渠道编号,而不直接写在代码中。这样做的好处是,可以针对不同渠道,自动化去修改Manifest文件中的渠道编号,然后自动为该渠道打包2013-05-05
Android使用BottomNavigationBar实现导航栏功能
这篇文章主要介绍了Android使用BottomNavigationBar实现导航栏功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2018-08-08
使用AndroidStudio上传忽略文件至SVN Server的解决办法
这篇文章主要介绍了使用AndroidStudio上传忽略文件至SVN Server的解决办法 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下2016-06-06


最新评论