android开发--下载图片
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<User> 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();
} }
效果图:图片大小可以设置
android开发--下载图片的更多相关文章
- Android异步下载图片并且缓存图片到本地
Android异步下载图片并且缓存图片到本地 在Android开发中我们经常有这样的需求,从服务器上下载xml或者JSON类型的数据,其中包括一些图片资源,本demo模拟了这个需求,从网络上加载XML ...
- android开发中图片优化步骤
android开发中图片优化方法 1.图片加载方法,方便用户加载图片 /*** * 加载本地图片 * @param context:主运行函数实例 * @param bitAdress:图片地址,一般 ...
- Android开发笔记——图片缓存、手势及OOM分析
把图片缓存.手势及OOM三个主题放在一起,是因为在Android应用开发过程中,这三个问题经常是联系在一起的.首先,预览大图需要支持手势缩放,旋转,平移等操作:其次,图片在本地需要进行缓存,避免频繁访 ...
- android 多线程下载图片
很多时候我们需要在Android设备上下载远程服务器上的图片进行显示,今天Android123整理出两种比较好的方法来实现远程图片的下载. 方法一.直接通过Android提供的Http类访问远程服 ...
- android 开发 对图片编码,并生成gif图片
demo场景: 将2张静态的png格式图片组合生成一个gif图片,间隔500毫秒,关键类:AnimatedGifEncoder 如需要解析gif获取每帧的图片,可参考上一篇博客:<android ...
- android 73 下载图片
package com.ithiema.imageviewer; import java.io.InputStream; import java.net.HttpURLConnection; impo ...
- Android开发-下载网络图片并显示到本地
Android下载网络图片的流程是: 发送网络请求->将图片以流的形式下载下来->将流转换为Bitmap并赋给ImageView控件. 注意点 最新的Android系统不可以在主线程上请求 ...
- Android 网络下载图片
2中方法: 1. public byte[] downloadResource(Context context, String url) throws ClientProtocolException, ...
- Android网络下载图片
package net.learn2develop.Networking; import android.app.Activity; import android.os.Bundle; import ...
随机推荐
- Web前端开发学习心得(一)
说快也快,说慢也慢.自学前端一个月了,进步不算大,不过仔细想来,倒也收获不少.码几行字,一是总结经验,二是继往开来. 刚开始是跟慕课网学的HTML+CSS,慕课网的课程虽然好,但好多知识都是特别基础的 ...
- c#事件机制
namespace test { class Publisher//出版社 { public delegate void PubComputer(string magazineName);//声明事件 ...
- JSBinding / Plugins & Build Mozjswrap Library
There are 2 libraries in Plugins: mozjs-31. This is SpiderMonkey library, built from https://github. ...
- LINQ 客户端生成自增列
var testQuery = (from item in TestInfo.GroupBy(t=>t.TestName) select new { TestCode = item.Min(g= ...
- java-装箱/拆箱-字符串转换成基本数据类型
一.理解java中包的含义及种类 java是一个面向对象编程,即一切皆是对象,那么有一个矛盾,从数据上划分知道java中的数据分为基本数据类型和引用数据类型,但是基本数据类型如何是一个对象呢?此时,就 ...
- openjudge-最好的草
http://noi.openjudge.cn/ch0108/17/ 总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 65536kB 描述 奶牛Bessie计划好好 ...
- php mysql 一个查询优化的简单例子
PHP+Mysql是一个最经常使用的黄金搭档,它们俩配合使用,能够发挥出最佳性能,当然,如果配合Apache使用,就更加Perfect了. 因此,需要做好对mysql的查询优化.下面通过一个简单的例子 ...
- Inno Setup怎样创建一个自动申请管理员身份运行的快捷
如果你使用的是 Unicode 版本的 Inno Setup,那么以下是更为专业的解决方法. 这是 mlaan 提及的再一种方法. QUOTE( CodeAutomation3.iss) ...
- jquery 让滚动条处于div底部
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- javascript 数组去重 unique
晚上无事,偶然看到这么个小测试,拿来写一写,希望大家提建议: 直接上代码: Array.prototype.unique = function (isStrict) { if (this.length ...