若想使自己的android运用联网,必须要在AndroidManifest.xml中获取联网的权限,(即在里面添加 <uses-permission android:name="android.permission.INTERNET" />代码)

如下图所示:


然后就是写页面的代码了,(即:本文中的activity_main.xml文件)

<ScrollView 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"    tools:context=".MainActivity" >    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:orientation="vertical"        android:padding="5dp" >        <EditText            android:id="@+id/edturl"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:hint="输入网站"            android:inputType="textUri"            android:singleLine="true" />        <Button            android:id="@+id/requesthtml"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="获取html代码" />        <EditText            android:id="@+id/edthttp"            android:layout_width="fill_parent"            android:layout_height="wrap_content"            android:hint="这里显示的是你所输入的网站的HTML代码" />    </LinearLayout></ScrollView>


重点来了,那是java文件的代码,不过,在这说一下注意的东西:在android 2.3版本以上,不能直接在主线程上联网,否则会抛出android.os.NetworkOnMainThreadException的错误,这是因为在联网的过程中,程序会发送请求以便获取数据,但假如直接在主线程发送请求的话,页面就会卡住,进入假死状态。android后来版本为了预防这种情况,于是。。。。


因此,我们联网需要异步来操作。因为我之前都是用Thread的,现在想换换其它东西,就用了AsyncTask。


于是Java文件分为两部分,第一部分是控制页面效果和监听的,第二部分是用来执行异步操作。


第一部分代码如下:

import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;public class MainActivity extends Activity {// 定义组件private EditText edtURL;private EditText edtHTTP;private Button btnRequest;private String strURL;// 用于存储网站地址private MyTask myTask;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化组件edtURL = (EditText) findViewById(R.id.edturl);edtHTTP = (EditText) findViewById(R.id.edthttp);btnRequest = (Button) findViewById(R.id.requesthtml);// 监听获取html代码的按钮btnRequest.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (!(strURL = edtURL.getText().toString()).equals("")) {//实例myTask对象myTask = new MyTask(edtHTTP);myTask.execute(strURL);}}});}}

第二部分代码:

import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import com.xiaoyan.httpclienttest.R.integer;import android.os.AsyncTask;import android.widget.EditText;/** * 用于异步操作来读取网页中HTML代码 *  * @author jianyan *  */public class MyTask extends AsyncTask<String, integer, StringBuffer> {private EditText edtHTTP;// 用于显示HTML代码private StringBuffer sbHTML;// 用于储存HTML代码public MyTask(EditText edtHTTP) {this.edtHTTP = edtHTTP;sbHTML = new StringBuffer();}/** * doInBackground方法内部执行后台任务,不可在此方法内修改UI */@Overrideprotected StringBuffer doInBackground(String... params) {// 初始化HTTP的客户端HttpClient hc = new DefaultHttpClient();// 实例化HttpGet对象HttpGet hg = new HttpGet(params[0]);try {// 让HTTP客户端已Get的方式请求数据,并把所得的数据赋值给HttpResponse的对象HttpResponse hr = hc.execute(hg);// 使用缓存的方式读取所返回的数据BufferedReader br = new BufferedReader(new InputStreamReader(hr.getEntity().getContent()));// 读取网页所返回的HTML代码String line = "";sbHTML = new StringBuffer();while ((line = br.readLine()) != null) {sbHTML.append(line);}return sbHTML;} catch (IOException e) {edtHTTP.setText("获取网页HTML代码出错!!!");}return null;}/** * onPostExecute方法用于在执行完后台任务后更新UI,显示结果 */@Overrideprotected void onPostExecute(StringBuffer result) {// 判断是否为null,若不为null,则在页面显示HTML代码if (result != null) {edtHTTP.setText(result);}super.onPostExecute(result);}}



所有代码都在上面了,然后我们看看运行的效果:(测试机:中兴U808)



源码地址如下:

[android] 获取网页中的HTML数据


更多相关文章

  1. android 4.2 compile on 64 bits Ubuntu
  2. 【转】Android上HDMI介绍(基于高通平台)
  3. Android(安卓)建立AIDL的步骤
  4. Android中sqlite之从网上获取数据更新UI
  5. Android两种数据库操作方式介绍
  6. 浅谈Android辅助功能 AccessibilityService
  7. Android(安卓)关于休眠的几个坑点
  8. Android(安卓)-SharedPreferences
  9. Android中数据库的一些操作(增删改查)

随机推荐

  1. 如何使用自己的makefile编译android ndk
  2. android Dependencies ,Private Libraries
  3. Android Layout的layout_height等属性为
  4. Android对Linux内核的改动你知道多少?
  5. 使用Android NDK中的独立toolchain来开发
  6. Android 网络请求详解
  7. COCOS2D-X跨ANDROID&IOS平台开发入门教程
  8. Android计算优化解析
  9. Android课堂笔记(九)——消息条、对话框、
  10. Handler机制分析