1、建立android项目MyApplication

2、修改布局文件activity_my.xml

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

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

android:paddingBottom="@dimen/activity_vertical_margin"

tools:context=".MyActivity">

android:id="@+id/button01"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="获取网页内容" />

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_below="@+id/button01">

android:id="@+id/textview01"

android:text=""

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

ScrollView用于给Textview添加滚动条。

3、添加联网权限 在AndroidManifest.xml添加,文件最终内容是:

package="com.example.letian.myapplication" >

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

android:name=".MyActivity"

android:label="@string/app_name" >

4、修改MyActivity.java

package com.example.letian.myapplication;

import android.app.Activity;

import android.os.Bundle;

import android.os.StrictMode;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import org.apache.http.HttpResponse;

import org.apache.http.HttpStatus;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.DefaultHttpClient;

import java.io.BufferedReader;

import java.io.InputStreamReader;

public class MyActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_my);

final Button btn01 = (Button) this.findViewById(R.id.button01);

final TextView tv01 = (TextView) this.findViewById(R.id.textview01);

btn01.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

tv01.setText(getUrlContent("http://www.oschina.net/"));

}

});

}

private String getUrlContent(String url) {

HttpGet getRequest = new HttpGet(url);

getRequest.addHeader("User-Agent", " Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0");

try {

HttpResponse response = new DefaultHttpClient().execute(getRequest);

if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {

BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

StringBuffer sb = new StringBuffer("");

String line = ""; //存储读取的一行内容

String NL = System.getProperty("line.separator"); //换行符

while ((line = in.readLine()) != null) {

sb.append(line+NL);

}

in.close();

return sb.toString();

} else {

return "读取失败:\n"+response.getStatusLine().getStatusCode();

}

} catch (Exception e) {

return "读取失败:\n"+e.toString();

}

}

}

5、但是运行结果并不令人满意,出现异常

网页请求时一个阻塞的过程,如果时间过长会造成程序假死,所以产生了该异常。这个异常在较新版本的Android中才提出。

6、一个并不推荐的解决办法

该方法可能会造成程序假死,所以最好不要在app中使用该方法。

在onCreate()的适当位置添加如下内容:

if (android.os.Build.VERSION.SDK_INT > 9) {

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

StrictMode.setThreadPolicy(policy);

} app运行结果如下:

7、使用线程的方法来解决(推荐)

将MyActivity.java修改如下:

package com.example.letian.myapplication;

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import org.apache.http.HttpResponse;

import org.apache.http.HttpStatus;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.DefaultHttpClient;

import java.io.BufferedReader;

import java.io.InputStreamReader;

public class MyActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_my);

final Button btn01 = (Button) this.findViewById(R.id.button01);

final TextView tv01 = (TextView) this.findViewById(R.id.textview01);

final Handler handler = new Handler(){

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

Bundle data = msg.getData();

tv01.setText(data.getString("value"));

}

};

final Runnable runnable = new Runnable(){

@Override

public void run() {

String result = getUrlContent("http://www.oschina.net/");

Message msg = new Message();

Bundle data = new Bundle();

data.putString("value", result);

msg.setData(data);

handler.sendMessage(msg);

}

};

btn01.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

new Thread(runnable).start();

}

});

}

/**

* 获取url对应的网页内容

* @param url

* @return

*/

private String getUrlContent(String url) {

HttpGet getRequest = new HttpGet(url);

getRequest.addHeader("User-Agent", " Mozilla/5.0 (Windows NT 6.3; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0");

try {

HttpResponse response = new DefaultHttpClient().execute(getRequest);

if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {

BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

StringBuffer sb = new StringBuffer("");

String line = ""; //存储读取的一行内容

String NL = System.getProperty("line.separator"); //换行符

while ((line = in.readLine()) != null) {

sb.append(line+NL);

}

in.close();

return sb.toString();

} else {

return "读取失败:\n"+response.getStatusLine().getStatusCode();

}

} catch (Exception e) {

return "读取失败:\n"+e.toString();

}

}

}

参考:

http://stackoverflow.com/questions/6343166/android-os-networkonmainthreadexception

Android编程典型实例与项目开发 吴亚峰等编

android+geturl+方法,浅入浅出Android(014):HTTP GET获取文本内容相关推荐

  1. 看雪学院-浅入浅出Android安全 笔记

    Note 看雪学院-浅入浅出Android安全 原作地址:http://www.kanxue.com/?article-read-547.htm 翻译作者:飞龙 Android 由四个层组成:Linu ...

  2. 浅入浅出 Android 安全 翻译完成!

    浅入浅出 Android 安全 翻译完成! 作者:Yury Zhauniarovich 译者:飞龙 来源:Yury Zhauniarovich | Publications 在线阅读 PDF格式 EP ...

  3. Java 注解 (Annotation)浅入深出

    Java 注解 (Annotation)浅入深出 本文主要参考与借鉴frank909 文章,但更为简单,详细. Annotation 中文译过来就是注解.标释的意思.Annotation是一种应用于类 ...

  4. [科普]浅入浅出Liunx Shellcode

    创建时间:2008-05-13 文章属性:原创 文章提交: pr0cess  (pr0cess_at_cnbct.org) 浅入浅出Liunx Shellcode /*---------------- ...

  5. 浅入深出之Java集合框架(上)

    Java中的集合框架(上) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到浅入深出之Java集合框架(下). ...

  6. 浅入深出之Java集合框架(中)

    Java中的集合框架(中) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到浅入深出之Java集合框架(下). ...

  7. SegmentFault 技术周刊 Vol.16 - 浅入浅出 JavaScript 函数式编程

    函数式编程(Functional Programming),一看这个词,简直就是学院派的典范. 以至于从 Lisp 的创世,到 Scheme.Haskell.Clean.Erlang.Miranda. ...

  8. 浅入浅出深度学习理论实践

    全文共9284个字,40张图,预计阅读时间30分钟. 前言 之前在知乎上看到这么一个问题:在实际业务里,在工作中有什么用得到深度学习的例子么?用到 GPU 了么?,回头看了一下自己写了这么多东西一直围 ...

  9. 处理中文乱码_浅入深出:一次提问引发的深思,从此再也不怕“乱码”问题

    这是恋习Python之浅入深出系列第3篇原创首发文章 作者|丁彦军 来源|恋习Python(ID:sldata2017) 转载请联系授权(微信ID:2394608316) 近日,有位粉丝向我请教,在爬 ...

  10. Spring MVC浅入浅出——不吹牛逼不装逼

    Spring MVC浅入浅出--不吹牛逼不装逼 前言 上文书说了Spring相关的知识,对Spring来了个浅入浅出,大家应该了解到,Spring在三层架构中主做Service层,那还有Web层,也就 ...

最新文章

  1. Flash传值给asp页面
  2. Matlab与线性代数 -- 全1矩阵
  3. 超强1000个jquery极品插件!(连载中。。。。最近更新20090710)
  4. linux nmcli源码,Linux上利用nmcli命令创建网络组(示例代码)
  5. nodejs+express +jade模板引擎 新建项目
  6. 数学--数论--(逆元)扩展欧几里求解+证明
  7. button点击后变色_汽车改色膜新潮流,2021年流行渐变色
  8. mysql被除数为0不报错_MySQL:关系除法
  9. 大数据学习笔记41:Hive - 用户自定义函数
  10. gnome桌面环境 kde桌面环境的区别
  11. Java数据结构与算法(3) - ch04栈(栈和转置)
  12. React Native重构路线图发布!
  13. JAVA网站后台管理系统
  14. PT100热敏电阻原理解析
  15. win7万能声卡驱动_我把一台PC的操作系统从win7换成了win10,它真的很棒!
  16. 蓝桥杯——鲁卡斯队列
  17. nodejs多房间web聊天室
  18. 阿里笔试之Java分词统计
  19. 基于BERT做中文文本分类(情感分析)
  20. 个人永久性免费-Excel催化剂功能第41波-文件文件夹相关函数

热门文章

  1. 【Elasticsearch】ES Elasticsearch查询优化
  2. 【杂项】2020年年度报告
  3. 【elasticsearch】 document 查询原理
  4. 【http】记一次http无法连通总是超时的问题
  5. 【Flink】Flink界面如何查看数据是否倾斜
  6. Spring : Spring Aop JDK动态代理调用过程
  7. ORA-00904: NAME: 标识符无效
  8. 07-霸道的Oracle内存使用
  9. 基于Spring框架的Controller中进行事务管理
  10. Gradle 比 Maven 好为什么用的人少