由于这段时间事情比较繁杂 996的公司,回去都12点了,在更新方面会有一些慢,还请谅解,第二天还要正常点来上班,简直莫得感情,言归正传:
首先提出咱们的功能要求:
通过网络地址获取网络图片,点击下载将图片显示出来,然后点击图片将图片保存到本地。
需要在manifest上添加一些权限:
<!-- 访问网络的权限 -->
<uses-permission android:name="android.permission.INTERNET">
<!-- 文件读取的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
<!-- 向SD卡中创建或者删除的权限。 -->
<uses-permission android:name="andorid.permission.MONUN_UNMOUNT_FILESYSTEMS"></uses-permission></uses-permission></uses-permission>
我为了省事,直接在主Activity开敲了,大家可以根据需求去改变
public class MainActivity extends Activity implements OnClickListener{
Button content;
ImageView image;
Bitmap bitmap;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
content=(Button)findViewById(R.id.content);
image=(ImageView)findViewById(R.id.image);
content.setOnClickListener(this);;
image.setOnClickListener(this);;
}
/**
* 获取网络图片
* @param imageurl 图片网络地址
* @return Bitmap 返回位图
*/
public Bitmap GetImageInputStream(String imageurl){
URL url;
HttpURLConnection connection=null;
Bitmap bitmap=null;
try {
url = new URL(imageurl);
connection=(HttpURLConnection)url.openConnection();
connection.setConnectTimeout(6000); //超时设置
connection.setDoInput(true);
connection.setUseCaches(false); //设置不使用缓存
InputStream inputStream=connection.getInputStream();
bitmap=BitmapFactory.decodeStream(inputStream);
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.content:
//加入网络图片地址
new Task().execute("https://pic.4j4j.cn/upload/pic/20130617/55695c3c95.jpg");
break;
case R.id.image:
//点击图片后将图片保存到SD卡跟目录下的Test文件夹内
SavaImage(bitmap, Environment.getExternalStorageDirectory().getPath()+"/Test");
Toast.makeText(getBaseContext(), "图片保存", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
Handler handler=new Handler(){
public void handleMessage(android.os.Message msg) {
if(msg.what==0x123){
image.setImageBitmap(bitmap);
}
};
};
/**
* 异步线程下载图片
*
*/
class Task extends AsyncTask<string, void="">{
protected Void doInBackground(String... params) {
bitmap=GetImageInputStream((String)params[0]);
return null;
}
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Message message=new Message();
message.what=0x123;
handler.sendMessage(message);
}
}
/**
* 保存位图到本地
* @param bitmap
* @param path 本地路径
* @return void
*/
public void SavaImage(Bitmap bitmap, String path){
File file=new File(path);
FileOutputStream fileOutputStream=null;
//文件夹不存在,则创建它
if(!file.exists()){
file.mkdir();
}
try {
fileOutputStream=new FileOutputStream(path+"/"+System.currentTimeMillis()+".png");
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,fileOutputStream);
fileOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
关于下载网络图片保存本地的流程呢,就是这个流程,记录一下,为自己以后开发更省事一些做准备。
最后说一下很重要的事情 :
多多关注微信