Android查看网页源码与开启子线程
来源:互联网 发布:满汉老干妈知乎 编辑:程序博客网 时间:2024/06/14 13:54
在Android4.0以后,只要涉及下载,读取都需要在子线程里面进行。
否则Android会自动抛出ANR。
页面显示如下
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="httpurlconnection.wineworld.lizhijie.a2_.MainActivity"> <EditText android:id="@+id/et_url" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入网址" /> <Button android:text="查看源码" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="requestUrl"/> <ScrollView android:id="@+id/scrollView" android:layout_width="fill_parent" android:layout_height="match_parent" android:scrollbarStyle="outsideOverlay" android:background="@android:drawable/edit_text"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/textView" /> </ScrollView></LinearLayout>
具体的操作流程如下
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; } }
注意要点:需要开启网页权限。
阅读全文
0 0
- Android查看网页源码与开启子线程
- Android开启子线程
- Android查看网页源码
- android中开启子线程
- android中开启子线程
- android中查看网页源码
- android eclipse 查看网页源码
- Android 开启子线程简单流程
- android通过访问网页查看网页源码
- Android线程开启与关闭
- iOS 开启子线程
- 开启子线程
- 子线程开启RunLoop
- android基础---网页源码查看器
- android socket之查看网页源码
- Android 网页html源码的查看器
- Android:网络:网页源码查看器
- android.os.NetworkOnMainThreadException(未开启子线程)
- 小程序学习(四)
- as 超级插件 AndroidStudioSuperPlugin [记录]
- win10系统 sqlserver 安装
- Java 查找二维数组中是否含有某个数
- LINQ系列:Linq to Object分组操作符
- Android查看网页源码与开启子线程
- Python中的坑
- PAT乙级 1060. 爱丁顿数(25)
- Mac上Git之创建本地库
- iOS
- MyEclipse中添加console显示
- 整型提升
- PAT 乙等 1059 C语言竞赛 C语言
- 从C过渡到C++