zoukankan      html  css  js  c++  java
  • 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();
        }
    
    }

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

        

      

  • 相关阅读:
    课程设置
    专家答疑:ASP.NET MVC与WebForm的区别
    PHP环境的搭建之利器 – APMServ
    office access vs mysql
    IBM Tivoli Identity Manager 5.1 Basic Implementation
    Windows安全认证是如何进行的?
    landesk桌面管理
    转:HBase在淘宝的应用和优化小结
    Workstation ITbased Security Best Practice Configurations
    Scale Your Applications with Component Load Balancing (cont'd)
  • 原文地址:https://www.cnblogs.com/yuluo123/p/6144816.html
Copyright © 2011-2022 走看看