• android 73 下载图片


    package com.ithiema.imageviewer;
    
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.view.Menu;
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        static ImageView iv;//显示图片的地方
        static MainActivity ma;
        static Handler handler = new Handler(){//静态的,可以直接通过类获取该属性,否则会有内存溢出,
            //此方法在主线程中调用,可以用来刷新ui
            public void handleMessage(android.os.Message msg) {
                //处理消息时,需要知道到底是成功的消息,还是失败的消息
                switch (msg.what) {
                case 1:
                    //把位图对象显示至imageview
                    iv.setImageBitmap((Bitmap)msg.obj);
                    break;
                case 0:
                    Toast.makeText(ma, "请求失败", 0).show();//使用ma不是this,是因为有可能这个代码执行的时候Acticity还没有完全创建出来。
                    break;
                }
            }
        };
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            iv = (ImageView) findViewById(R.id.iv);
            ma = this;//本Activity完全创建出来的时候获取本Activity,
        }
    
        public void click(View v){
            Thread t = new Thread(){
                @Override
                public void run() {
                    //下载图片
                    //1.确定网址
                    String path = "http://192.168.13.13:8080/dd.jpg";
                    try {
                        //2.把网址封装成一个url对象
                        URL url = new URL(path);
                        //3.获取客户端和服务器的连接对象,此时还没有建立连接,没有产生任何的网络交互,
                        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                        //4.对连接对象进行初始化
                        //设置请求方法,注意大写
                        conn.setRequestMethod("GET");
                        //设置连接超时,服务器5秒钟没有响应就超时
                        conn.setConnectTimeout(5000);
                        //设置读取超时,服务器5秒钟没有把流给客户端就超时
                        conn.setReadTimeout(5000);
                        //5.发送请求,与服务器建立连接
                        conn.connect();
                        //如果响应码为200,说明请求成功
                        if(conn.getResponseCode() == 200){
                            //获取服务器响应头中的流,流里的数据就是客户端请求的数据
                            InputStream is = conn.getInputStream();
                            //读取出流里的数据(图片),并构造成位图对象,安卓中Bitmap表示图片。
                            Bitmap bm = BitmapFactory.decodeStream(is);//从流里读数据就是从网上下载的过程,
                            
    //                        ImageView iv = (ImageView) findViewById(R.id.iv);
    //                        //把位图对象显示至imageview
    //                        iv.setImageBitmap(bm);
                            
                            Message msg = new Message();
                            //消息对象可以携带数据
                            msg.obj = bm;
                            msg.what = 1;
                            //把消息发送至主线程的消息队列
                            handler.sendMessage(msg);
                            
                        }
                        else{
    //                        Toast.makeText(MainActivity.this, "请求失败", 0).show();
                            Message msg = handler.obtainMessage();
                            msg.what = 0;
                            handler.sendMessage(msg);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            };
            t.start();
        }
           //清单文件:<uses-permission android:name="android.permission.INTERNET"/>   访问网络的权限
        /*#网络请求
        ###主线程阻塞
        * UI停止刷新,应用无法响应用户操作
        * 耗时操作不应该在主线程进行
        * ANR
            * application not responding
            * 应用无响应异常
            * 主线程阻塞时间过长,就会抛出ANR,ANR是安卓系统用来保护用户体验的。
        * 主线程又称UI线程,因为只有在主线程中,才能刷新UI*/
    }

     带缓存的文件下载:

    package com.ithiema.imageviewer;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.net.URLConnection;
    
    import com.ithiema.cacheimageviewer.R;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.view.Menu;
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        static ImageView iv;
        static MainActivity ma;
        static Handler handler = new Handler(){
            //此方法在主线程中调用,可以用来刷新ui
            public void handleMessage(android.os.Message msg) {
                //处理消息时,需要知道到底是成功的消息,还是失败的消息
                switch (msg.what) {
                case 1:
                    //把位图对象显示至imageview
                    iv.setImageBitmap((Bitmap)msg.obj);
                    break;
                case 0:
                    Toast.makeText(ma, "请求失败", 0).show();
                    break;
                }
            }
        };
        @Override
        protected void onCreate(Bundle savedInstanceState) {//
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            iv = (ImageView) findViewById(R.id.iv);
            ma = this;//this为本Activity,说明onCreate方法是在Activity完全创建出来后执行的,
        }
    
        public void click(View v){
            //下载图片
            //1.确定网址
            final String path = "http://192.168.13.13:8080/dd.jpg";
            final File file = new File(getCacheDir(), getFileName(path));//getFileName(path)为dd.jpg,getCacheDir()为内存储缓存文件夹data/data/包名/cache/dd.jpg,
            //判断,缓存中是否存在该文件
            if(file.exists()){
                //如果缓存存在,从缓存读取图片
                System.out.println("从缓存读取的");
                Bitmap bm = BitmapFactory.decodeFile(file.getAbsolutePath());
                iv.setImageBitmap(bm);//主线程就是UI线程,
            }
            else{
                //如果缓存不存在,从网络下载
                System.out.println("从网上下载的");
                Thread t = new Thread(){
                    @Override
                    public void run() {
                        try {
                            //2.把网址封装成一个url对象
                            URL url = new URL(path);
                            //3.获取客户端和服务器的连接对象,此时还没有建立连接
                            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                            //4.对连接对象进行初始化
                            //设置请求方法,注意大写
                            conn.setRequestMethod("GET");
                            //设置连接超时
                            conn.setConnectTimeout(5000);
                            //设置读取超时
                            conn.setReadTimeout(5000);
                            //5.发送请求,与服务器建立连接
                            conn.connect();
                            //如果响应码为200,说明请求成功
                            if(conn.getResponseCode() == 200){
                                //获取服务器响应头中的流,流里的数据就是客户端请求的数据
                                InputStream is = conn.getInputStream();
                                //读取服务器返回的流里的数据,把数据写到本地文件,缓存起来
                                FileOutputStream fos = new FileOutputStream(file);
                                byte[] b = new byte[1024];//没次读取1K,单位byte,
                                int len = 0;
                                while((len = is.read(b)) != -1){
                                    fos.write(b, 0, len);//可以缓存到sd卡,也可以缓存到内存储中,从0开始len结束写出去,
                                }
                                fos.close();
                                //读取出流里的数据,并构造成位图对象
                                //流里已经没有数据了
    //                            Bitmap bm = BitmapFactory.decodeStream(is);//len = is.read(b)已经把流里面的东西读完了,
                                Bitmap bm = BitmapFactory.decodeFile(file.getAbsolutePath());//通过file文件路径构造位图对象
                                Message msg = new Message();
                                //消息对象可以携带数据
                                msg.obj = bm;
                                msg.what = 1;
                                //把消息发送至主线程的消息队列
                                handler.sendMessage(msg);
                            }
                            else{
    //                            Toast.makeText(MainActivity.this, "请求失败", 0).show();
                                Message msg = handler.obtainMessage();
                                msg.what = 0;
                                handler.sendMessage(msg);
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                };
                t.start();
            }
        }
        
        public String getFileName(String path){
            int index = path.lastIndexOf("/");
            return path.substring(index + 1);
        }
    }
  • 相关阅读:
    Impala服务JVM崩溃问题
    Impala编译部署-6集群部署
    Impala编译部署-5单机部署-2
    Impala编译部署-5单机部署-1
    Impala编译部署-4
    Impala编译部署-3
    Impala编译部署-2
    Impala编译部署-1
    工作转向Kudu
    python 屏幕录制改进版,无opencv黑框显示
  • 原文地址:https://www.cnblogs.com/yaowen/p/4928676.html
Copyright © 2020-2023  润新知