博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android开发--下载图片
阅读量:4966 次
发布时间:2019-06-12

本文共 4067 字,大约阅读时间需要 13 分钟。

1、背景介绍

网络上图片的请求,是我们最常见的网络请求之一,不亚于对json/xml数据的请求。一般要展示给用户看的,都不会是纯粹的文字,往往都是图文信息。而在移动互联网时代,图文又往往需要最新的资讯,数据都是从网络上获取。

像我们都在使用的微信,它的朋友圈中就好多图文信息;使用的新浪微博,用户的图标也是图片信息,等等诸如此类。由此可见,对于图片的请求处理,非常重要,我们做开发的应该掌握。今天介绍一下笔者在开发Android项目过程中使用过的一些代码。

2、思路分析

(1)取得与服务器的连接

(2)设置链接属性

(3)从客户端获取数据

(4)生成图片,关闭链接

3、实例

1、创建android项目

  

2、找到图片,复制下载地址,如这张图片

  

3、mytest继承AsyncTask,在多线程里写,代码如下

  

package com.example.multithreadind01;import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import java.net.URLConnection;import java.net.URLEncoder;import java.util.List;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.os.AsyncTask;import android.view.View;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ProgressBar;import android.widget.TextView;import android.widget.Toast;public class MyTask extends AsyncTask {    private BaseAdapter adapter;    private List
userList; private MainActivity activity; public MyTask(MainActivity activity){ this.activity = activity; } private String errorMessage = ""; private String messageInfo = ""; private static final String URL_STR = "http://android2017.duapp.com/test1.jsp"; private static final String URL_img_STR = "http://cms-bucket.nosdn.127.net/c476803813014a5fa865f22c0faa340320161208080029.jpeg"; private String lastId = "123&1=1"; private Bitmap bitmap; //1.所有耗时的代码,写到这里来(数据库、蓝牙、网络服务) //2.绝对不能碰UI @Override protected Object doInBackground(Object... params) { try { //路径 URL url = new URL(URL_img_STR); HttpURLConnection conn = (HttpURLConnection)url.openConnection(); //对连接进行配置 conn.setDoOutput(false); conn.setDoInput(true); conn.setRequestMethod("GET");//403错误 //防止读取脏数据 conn.setUseCaches(false); if ( conn.getResponseCode() == 200){ //输入流 InputStream is = conn.getInputStream(); bitmap = BitmapFactory.decodeStream(is); is.close(); conn.disconnect(); return "123"; } else{ errorMessage = "服务器繁忙,请稍后再试("+conn.getResponseCode()+")"; return "errorserver"; } } catch (Exception e) { errorMessage = e.getMessage(); return "errorclient"; } } //准备 @Override protected void onPreExecute() { Toast.makeText(activity, "开始执行...", Toast.LENGTH_SHORT).show(); } //做完后执行 @Override protected void onPostExecute(Object result) { String r = result.toString(); TextView tv = (TextView)activity.findViewById(R.id.textView1); if ("errorclient".equals(r)){ if (errorMessage.indexOf("No add")!=-1){ tv.setText("网络不通"); } else{ tv.setText("访问网络时其它异常:"+errorMessage); } }else if("errorserver".equals(r)){ tv.setText(errorMessage); }else{ tv.setText(r); //显示图片 ImageView iv = (ImageView)activity.findViewById(R.id.imageView1); iv.setImageBitmap(bitmap); } } //分步完成 @Override protected void onProgressUpdate(Object... values) { // TODO Auto-generated method stub //0,1,2,3,4 int bar = Integer.parseInt(values[0].toString()); bar = (bar+1)*20; ProgressBar progressBar = (ProgressBar)activity.findViewById(R.id.progressBar1); progressBar.setProgress(bar); adapter.notifyDataSetChanged(); }}

  效果图:图片大小可以设置

    

  

 

posted on
2016-12-08 14:27 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/yuluo123/p/6144816.html

你可能感兴趣的文章
2019.01.17王苛震作业
查看>>
清除浮动
查看>>
PayPal(贝宝)支付接口、文档、IPN
查看>>
ORACLE 10G R2_执行计划中cost cardinality bytes cpu_cost io_cost解释
查看>>
本地存储
查看>>
MP3的播放与停止
查看>>
牛客(59)按之字形顺序打印二叉树
查看>>
JavaScript 图表库 xCharts
查看>>
Android项目的目录结构
查看>>
C++中“引用”的底层实现
查看>>
Spring Cloud与微服务构建:微服务简介
查看>>
Babel 是干什么的
查看>>
cocos2dx-3.0(8)------Label、LabelTTF、LabelAtlas、LabelBMFont使用之法
查看>>
CODE[VS] 1842 递归第一次
查看>>
20180418小测
查看>>
数字三角形
查看>>
NGUI 减少drawcall规则
查看>>
三元表达,匿名函数
查看>>
前端笔记-基础笔记
查看>>
【LeetCode & 剑指offer刷题】查找与排序题6:33. Search in Rotated Sorted Array(系列)
查看>>