日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發(fā)布時間:2024/9/27 Android 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 10_Android中通过HttpUrlConnection访问网络,Handler和多线程使用,读取网络html代码并显示在界面上,ScrollView组件的使用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  • 編寫如下項目:

  • 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() {

    ????????????? // 請求網(wǎng)絡

    ????????????? 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();

    ??? }

    ?

    ??? /**

    ??? ?* 根據(jù)給定的url訪問網(wǎng)絡, 抓去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;

    ??? }

    ???

    ??? /**

    ??? ?* 根據(jù)流返回一個字符串信息

    ??? ?* @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();? // 把流中的數(shù)據(jù)轉(zhuǎn)換成字符串, 采用的編碼是: 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);? // 對原有的字節(jié)數(shù)組進行使用處理后的編碼名稱進行編碼

    ?????? baos.close();

    ?????? return html;

    ??? }

    }

    ?

    與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

    總結(jié)

    以上是生活随笔為你收集整理的10_Android中通过HttpUrlConnection访问网络,Handler和多线程使用,读取网络html代码并显示在界面上,ScrollView组件的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。