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();
    }

}

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

    

  

原文地址:https://www.cnblogs.com/yuluo123/p/6144816.html