zoukankan      html  css  js  c++  java
  • 通过HTTP访问网络资源

    添加访问网络的权限:<uses-permission android:name="android.permission.INTERNET"/>

    package com.shz.imageviewer;
    
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.URL;
    
    import android.app.Activity;
    import android.app.ActionBar;
    import android.app.Fragment;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.text.TextUtils;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.Toast;
    import android.os.Build;
    
    public class MainActivity extends Activity {
    
        private ImageView iv;
        private EditText txtPath;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            this.iv = (ImageView) this.findViewById(R.id.iv);
            this.txtPath = (EditText) this.findViewById(R.id.txtPath);
        }
        
        // Android新版系统中不允许UI处理比较耗时的操作(ANR),如果有耗时操作,可以通过开启一个子线程去处理;
        // 只有UI线程可以更新view对象。
        
        // 如果有多个子线程更新UI,更新UI完毕后,检查这个更新的操作是否在主线程的代码中执行的,
        // 如果是主线程,则不会有问题
        // 如果不是主线程,则会抛出异常:CalledFromWrongThreadException
        
        // 1.定义一个handler消息处理器
        private Handler handler = new Handler(){
    
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what) {
                case 1:
                    Bitmap bitmap = (Bitmap)msg.obj;
                    iv.setImageBitmap(bitmap);
                    break;
                case 2:
                    Toast.makeText(MainActivity.this, msg.obj.toString(), Toast.LENGTH_LONG).show();
                    break;
                default:
                    break;
                }
            }        
        };
        
        private void sendMessage(int what,Object obj)
        {
            Message msg = new Message();
            msg.what = what;
            msg.obj = obj;
            handler.sendMessage(msg);
        }
    
        public void click(View view) {
            final String path = this.txtPath.getText().toString().trim();
            if (TextUtils.isEmpty(path)) {
                return;
            }
            
            // 2.开启一个子线程获取网络图片资源数据
            new Thread(){
                public void run() {
                    try {
                        URL url = new URL(path);
                        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                        conn.setRequestMethod("GET");
                        conn.setConnectTimeout(10000);
                        conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36");
    
                        int code = conn.getResponseCode();
                        if ( code == 200) {
                            Bitmap bitmap = BitmapFactory.decodeStream(conn.getInputStream());
                            
                            // 3.利用handler消息处理器发送一条消息到主线程的MessageQueue消息队列中,主线程中
                            //   有一个消息轮询器Looper,此Looper会去不断的轮询MQ中的消息并
                            //   交给handler的handleMessage()方法去处理
                            sendMessage(1, bitmap);
                        } else {
                            sendMessage(2, "获取图片失败");
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        sendMessage(2, "获取图片失败");
                    }
                };
            }.start();
        }
    }

  • 相关阅读:
    python json 和 pickle的补充 hashlib configparser logging
    go 流程语句 if goto for swich
    go array slice map make new操作
    go 基础
    块级元素 行内元素 空元素
    咽炎就医用药(慢性肥厚性咽炎)
    春季感冒是风寒还是风热(转的文章)
    秋季感冒 咳嗽 怎么选药
    解决IE浏览器“无法显示此网页”的问题
    常用的 css 样式 记录
  • 原文地址:https://www.cnblogs.com/shaomenghao/p/3908753.html
Copyright © 2011-2022 走看看