1. 编写如下项目:

2 编写Android清单文件

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

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.itheima28.htmldemo"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk

android:minSdkVersion="8"

android:targetSdkVersion="19" />

<uses-permission android:name="android.permission.INTERNET"/>

<application

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<activity

android:name="com.itheima28.htmldemo.MainActivity"

android:label="@string/app_name" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

</manifest>

3 编写布局文件activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".MainActivity" >

<LinearLayout

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

<EditText

android:id="@+id/et_url"

android:layout_width="0dip"

android:text="http://www.baidu.com"

android:layout_height="wrap_content"

android:singleLine="true"

android:layout_weight="1"/>

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="getHtml"

android:text="GO"/>

</LinearLayout>

<ScrollView

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TextView

android:id="@+id/tv_html"

android:layout_width="fill_parent"

android:layout_height="fill_parent"/>

</ScrollView>

</LinearLayout>

4 编写Activity的类MainActivity如下:

package com.itheima28.htmldemo;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.text.TextUtils;

import android.util.Log;

import android.view.View;

import android.widget.EditText;

import android.widget.TextView;

import android.widget.Toast;

public class MainActivity extends Activity {

private static final String TAG = "MainActivity";

private static final int SUCCESS = 0;

protected static final int ERROR = 1;

private EditText etUrl;

private TextView tvHtml;

private Handler handler = new Handler() {

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

switch (msg.what) {

case SUCCESS:

tvHtml.setText((String) msg.obj);

break;

case ERROR:

Toast.makeText(MainActivity.this, "访问失败", 0).show();

break;

default:

break;

}

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

etUrl = (EditText) findViewById(R.id.et_url);

tvHtml = (TextView) findViewById(R.id.tv_html);

}

public void getHtml(View v) {

final String url = etUrl.getText().toString();

new Thread(new Runnable() {

@Override

public void run() {

// 请求网络

String html = getHtmlFromInternet(url);

if(!TextUtils.isEmpty(html)) {

// 更新textview的显示了

Message msg = new Message();

msg.what = SUCCESS;

msg.obj = html;

handler.sendMessage(msg);

} else {

Message msg = new Message();

msg.what = ERROR;

handler.sendMessage(msg);

}

}

}).start();

}

/**

* 根据给定的url访问网络, 抓去html代码

* @param url

* @return

*/

protected String getHtmlFromInternet(String url) {

try {

URL mURL = new URL(url);

HttpURLConnection conn = (HttpURLConnection) mURL.openConnection();

conn.setRequestMethod("GET");

conn.setConnectTimeout(10000);

conn.setReadTimeout(5000);

//         conn.connect();

int responseCode = conn.getResponseCode();

if(responseCode == 200) {

InputStream is = conn.getInputStream();

String html = getStringFromInputStream(is);

return html;

} else {

Log.i(TAG, "访问失败: " + responseCode);

}

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

/**

* 根据流返回一个字符串信息

* @param is

* @return

* @throws IOException

*/

private String getStringFromInputStream(InputStream is) throws IOException {

ByteArrayOutputStream baos = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

int len = -1;

while((len = is.read(buffer)) != -1) {

baos.write(buffer, 0, len);

}

is.close();

String html = baos.toString();  // 把流中的数据转换成字符串, 采用的编码是: utf-8

String charset = "utf-8";

if(html.contains("gbk") || html.contains("gb2312")

|| html.contains("GBK") || html.contains("GB2312")) {       // 如果包含gbk, gb2312编码, 就采用gbk编码进行对字符串编码

charset = "gbk";

}

html = new String(baos.toByteArray(), charset);  // 对原有的字节数组进行使用处理后的编码名称进行编码

baos.close();

return html;

}

}

10_Android中通过HttpUrlConnection访问网络,Handler和多线程使用,读取网络html代码并显示在界面上,ScrollView组件的使用相关推荐

  1. 将从数据库中读取的号码中间四位隐去显示在界面上

    需求 在使用各种软件或者是查看个人信息时常看到中间的四位信息是用"*"代替的.以达到保护信息的目的. 实现方法,使用fill函数.将从数据库中读取的string型的电话号码转成ch ...

  2. Android使用HttpURLConnection访问网络

    Android使用HttpURLConnection访问网络 一.管理网络状态 使用网络进行数据通信前,需要先获取网络状态. 使用ConnectivityManager获取网络状态步骤: 1.获取Co ...

  3. 网络中工作组中计算机无法访问或没有选项的解决办法汇总

    在网上邻居中点"查看工作组计算机"时显示"workgroup无法访问.您可能没有权限使用网络资源.....此工作组的服务器列表当前无法使用" 我所使用过的方法如 ...

  4. 网络中的计算机访问不了,win7系统不能在计算机-网络中访问wdMyCloud的技巧介绍...

    win7系统使用久了,好多网友反馈说win7系统不能在计算机-网络中访问wdMyCloud的问题,非常不方便.有什么办法可以永久解决win7系统不能在计算机-网络中访问wdMyCloud的问题,面对w ...

  5. w10不能访问网络计算机,Win10系统不能在计算机-网络中访问WDMyCloud怎么办

    很多用户在升级win10系统后,都遇到了无法在计算机-网络中访问WDMyCloud的情况.如果用户直接点击"储存"和"媒体设备"中的Mycloud,那么开启的只 ...

  6. 黑马程序员——网络编程(二)--TCP网络程序、访问Internet网络资源

    -------  android培训.java培训.期待与您交流! ---------- 第一部分 TCP网络程序 一.TCP网络程序的工作原理 TCP客户端程序与TCP服务器程序的交互过程: (1) ...

  7. python异步多线程框架_Python网络编程中的服务器架构(负载均衡、单线程、多线程和同步、异步等)。...

    这篇文章主要介绍服务器架构. 网络服务需要面对两个挑战.第一个问题是核心挑战,要编写出能够正确处理请求并构造合适响应的代码. 第二个挑战是如何将网络代码部署到随系统自动启动的Windows服务或者是U ...

  8. 十步优化SQL Server中的数据访问

    故事开篇:你和你的团队经过不懈努力,终于使网站成功上线,刚开始时,注册用户较少,网站性能表现不错,但随着注册用户的增多,访问速度开始变慢,一些用户开始发来邮件表示抗议,事情变得越来越糟,为了留住用户, ...

  9. 网络推广中常见的网站建设细节中有哪些重点值得网络推广专员重视?

    通常在网络推广运营中最初的网站建设中有很多开发细节和重点值得引起站长的注意,通过这些重点开发细节可以为后续的网站优化运营奠定良好的基础,有利于后期的长久型网站运营优化,那么这些网站建设开发细节有哪些需 ...

最新文章

  1. 都说AIOps是必然趋势,那实践AIOps之前需要做些什么准备?\n
  2. 子矩阵的最大累加和问题
  3. 计算机等级考试二级c语言笔试,全国计算机等级考试二级C语言笔试试题和答案.doc...
  4. akka_Akka的字数统计MapReduce
  5. SourceTree windows版本免注册免登陆使用方法
  6. Android 网络请求(OKHttp框架)
  7. c# 带返回值的action_C#基础知识之Func和Action学习
  8. 精雕软件怎么把图片转成灰度图_精雕软件怎样保存bmp
  9. 图像格式(YUYV)
  10. 解决IE兼容H5的问题
  11. 举个栗子!Tableau技巧(6):妙用Index函数来改变数据排序
  12. XJTUSE专业课与实验指南(已经开源)
  13. poi 获取excel单元格超链接和设置excel单元格超链接及导出excel
  14. 【DeepDive Tutorial 】Extracting mentions of spouses from the news
  15. Android 实时监听耳机拔除
  16. 半年学好英语,一辈子都能受益。
  17. 论文精读 | 语义SLAM综述:现状回顾问题分析未来趋势!
  18. 计算小分子之间的RMSD
  19. 论文三线表中表头添加横线间隔线
  20. Ubuntu空间不足,如何扩容(超详细讲解)

热门文章

  1. python STL分解
  2. Java 设计模式之模板方法模式
  3. VTK:图像拉普拉斯算子用法实战
  4. JavaScript实现jumpSearch跳转搜索算法(附完整源码)
  5. JavaScript实现eulerianPath欧拉路径算法(附完整源码)
  6. OpenCASCADE绘制测试线束:几何命令之近似值
  7. wxWidgets:wxTextWrapper类用法
  8. wxWidgets:wxPropertyGrid类用法
  9. boost::log::visitation_result用法的测试程序
  10. boost::container模块实现vector选项