在Android4.0以后,只要涉及下载,读取都需要在子线程里面进行。

否则Android会自动抛出ANR。

页面显示如下

<?xml version="1.0" encoding="utf-8"?>        

具体的操作流程如下

import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.TextView;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;public class MainActivity extends AppCompatActivity {        private EditText editText;        private TextView textView;        //[3.2]在主线程新家        private Handler handler=new Handler(){            //[3.3]重写该方法,获取子线程数据,更新主线程页面            @Override            public void handleMessage(Message msg) {                //[3.5.1]获取消息,更新UI                textView.setText(msg.obj.toString());//在这里就直接赋值了。没有进行判断            }        };        @Override        protected void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.activity_main);            editText=(EditText) findViewById(R.id.et_url);            textView=(TextView)findViewById(R.id.textView);        }        public void requestUrl(View view)  {            //[3.1]新建子线程            new Thread(){                @Override                public void run() {                    try{                        //请求文本之前需要添加 网络权限                        //[1]获取当前文本框输入的地址                        String path=editText.getText().toString().trim();                        //[1.1]将输入的文本,生成URL                        URL url= new URL(path);                        //[2.1]生成HttpURLConnection 对象                        HttpURLConnection httpURLConnection=(HttpURLConnection)url.openConnection();                        httpURLConnection.setRequestMethod("GET");//请求方式                        httpURLConnection.setConnectTimeout(5000);//请求超时时间                        int resultCode=httpURLConnection.getResponseCode();//获取请求状态码                        //200 请求成功                        //404 没有找到                        //401权限问题                        if(resultCode==200){                            InputStream inputStream=httpURLConnection.getInputStream();//获取数据流                            String content=getStringByInputStream(inputStream);                            //textView.setText(content);                            //[3.4.1]创建发送给主线程的消息                            Message msg=new Message();                            msg.obj=content;//更新内容                            msg.what=106;   //更新的标志                            handler.sendMessage(msg);                        }                    }catch (Exception e){                        e.printStackTrace();                    }                }            }.start();        }        //将输入流转换成字符        private String getStringByInputStream(InputStream inputStream)throws Exception{            ByteArrayOutputStream outSteam = new ByteArrayOutputStream();            byte[] buffer = new byte[1024];            int len = -1;            while ((len = inputStream.read(buffer)) != -1) {                outSteam.write(buffer, 0, len);            }            outSteam.close();            inputStream.close();            String content= new String(outSteam.toByteArray());//new String 是为了方便编码格式            return content;        }    }

注意要点:需要开启网页权限。



更多相关文章

  1. 获取手机安装的全部应用的示例教程
  2. Android获取通话记录【名称,号码,日期,通话时间,类型】
  3. 6.1、Android中从Internet获取数据
  4. Android(安卓)手机上获取物理唯一标识码
  5. 解析Android消息处理机制:Handler/Thread/Looper & MessageQueue
  6. android发送post请求出现问题
  7. struts2中获取request、response,与android客户端进行交互
  8. Android网络通信(2):HTTP通信
  9. Android(安卓)10 定位问题,获取NMEA(支持5.0~10.0)

随机推荐

  1. Android(安卓)Service组件的生命周期及用
  2. Android开发中的问题集锦
  3. Android(安卓)实现通知栏显示多个notific
  4. android 自动查找控件id
  5. Android软键盘一些处理
  6. Launcher 安装APK快捷方式出现在末尾空白
  7. Android(安卓)- 判断当前网络环境、隐藏
  8. 移动架构39_RxAndroid二(变换调用:map、fla
  9. android wifi scan and auto re-connect
  10. Android(安卓)数据存储(二) 共享参数存储