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

  • 相关阅读:
    Web Site 与 Web Application 的区别
    Jquery获取text,areatext,radio,checkbox,select值
    C#怎么样操作world文档中的文字型窗体域?
    DataFormatString 用法
    overload和override的区别
    Apollo安装
    工控机基础
    CAN总线技术基础
    dd命令_Linux dd命令:复制(拷贝)文件,并对原文件进行转换
    Unity2021零基础入门教程
  • 原文地址:https://www.cnblogs.com/shaomenghao/p/3908753.html
Copyright © 2011-2022 走看看