10_Android中通过HttpUrlConnection访问网络,Handler和多线程使用,读取网络html代码并显示在界面上,ScrollView组件的使用
編寫如下項目:
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)絡(luò) ????????????? 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)絡(luò), 抓去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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 09_Android中ContentPr
- 下一篇: 4.纯电动汽车对动力蓄电池的热管理有哪些