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



  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;

    }

}

 

时间: 2024-08-27 14:21:26

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

在vs2010中如何利用opencv使用“打开文件”选择路径读取视频信息

问题描述 在vs2010中如何利用opencv使用"打开文件"选择路径读取视频信息 代码如下,在网上找了好多都是使用绝对路径才能读取视频信息,我想用"打开文件"取得的文件路径,利用cvCaptureFromAVI读取视频应该怎么处理?或者可以用opencv提供的其他函数来读取视频的相关信息吗? 以下代码的错误提示:"cvCreateFileCapture": 不能将参数 1 从"CString"转换为"const c

怎么用hibernate把mysql中的blob型取出来显示在页面上?

问题描述 Queryquery=session.createQuery("fromLipinasawherea.bianhao="+bianhao);list=query.list();执行完这句我应该已经将数据库中的图片数据得到了吧?if(list==null){System.out.println("ok");}for(inti=0;i<list.size();i++){Lipinlipin=(Lipin)list.get(i);lipin.getPict

请教:VB.net中 如何用实现 类似TelNet.exe的纯文本网络访问?

问题描述 请教:VB.net中如何用实现类似TelNet.exe的纯文本网络访问?用命令行的方式,访问网络服务器.嗯!最近准备深入学习各种邮件协议,准备自己写一些邮件组件! 解决方案 解决方案二:嗯!第一步是希望写个类,通过IMAP协议,检查邮件是否成功上传到邮件服务器?

深入解析Linux系统中的SELinux访问控制功能

  SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统.NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件.SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到. SELinux 是 2.6 版本的 Linux 内核中提供的强制访问控制

Word弹出“无法访问您试图使用功能所在的网络位置”怎么办

打开Word2003时,你是否遇到过弹出"无法访问您试图使用功能所在的网络位置",这是怎么回事,中毒了吗?别担心,今天小编为大家介绍两种解决方法,下面就一起看看吧. 出现问题:请按确定重试,或在下面框中输入包含安装程序包gaozhi.msi的文件夹的路径. 如图: 解决方法: 方法一.直接覆盖安装或者选择修复安装office即可 方法二. 1.打开注册表(打开方法:开始-运行,输入:regedi) 2.按F3搜索gaozhi.msi,(PS:先备份) 3.你可以在"HKEY_

Android中判断网络连接是否可用及监控网络状态_Android

获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 1)判断是否有网络连接 复制代码 代码如下: public boolean isNetworkConnected(Context context) { if (context != null) { ConnectivityManager mConn

菜单请求不到后台。-菜单访问不到controller,用firebug,看网络,没有响应。

问题描述 菜单访问不到controller,用firebug,看网络,没有响应. 我项目中只有一个菜单访问不到Controller,拿不到cookie,其他菜单都可以正常访问,本地测试的时候,菜单都是正常的,部署到线上就出问题了,访问的时候,一直就加载,最后就出这个错误了. 求解. 浏览器报504,求解啊.这到底是什么为题引起的. 解决方案 http://jingyan.baidu.com/article/6fb756ecbf4774241858fb9a.html 解决方案二: 看看路径是否配置

Linux 有问必答:如何从VirtualBox中从主机访问NAT客户机

Linux 有问必答:如何从VirtualBox中从主机访问NAT客户机 提问: 我有一台运行在VirtualBox上的使用NAT的虚拟机,因此虚拟机会被VirtualBox分配一个私有IP地址(10.x.x.x).如果我想要从主机SSH到虚拟机中,我该怎么做? VirtualBox对虚拟机支持几种不同的网络方式,其中一种是NAT网络.当虚拟机启用NAT后,VirtualBox会自动在虚拟机和主机之间进行网络翻译,因此你不必在虚拟机和主机之间配置任何东西.这也意味着NAT中的虚拟机对于外部网络以

介绍如何在ISA Server 2006中发布邮件访问服务

在 http://www.aliyun.com/zixun/aggregation/14454.html">Exchange 服务器提供的邮件访问服务功能中,最常用的是以下三个: 基于Web协议的OWA,让客户端可以通过Web浏览器访问邮件服务; 基于RPC协议的MAPI,让客户端可以通过Outlook访问邮件服务,具有最完整的用户服务特性; SMTP协议,用于邮件服务器之间的邮件转发,和非MAPI客户端的邮件发送; 在这篇文章中,我将给大家介绍如何在 ISA Server 2006 中发