[android] 网络html查看器
訪問(wèn)一個(gè)網(wǎng)頁(yè)的請(qǐng)求實(shí)際上就是一個(gè)GET請(qǐng)求,應(yīng)用的布局沒(méi)啥好說(shuō)的,線性布局,定義好控件,在activity代碼里面先獲取到控件,獲取到EditText控件的網(wǎng)絡(luò)路徑,開(kāi)啟get請(qǐng)求
?
開(kāi)啟一個(gè)新的線程,new?Thread(){}.start()
獲取Url對(duì)象,new出來(lái),參數(shù):path是String的url,內(nèi)部類訪問(wèn)外部類的變量,應(yīng)該頂一次final的
主線程中定義成員屬性Handler對(duì)象,為了方便直接重寫handleMessage()方法,回調(diào)過(guò)來(lái)的參數(shù)是Message對(duì)象,獲取Message對(duì)象的what屬性和obj屬性,
New出Url之后,會(huì)有異常產(chǎn)生,捕獲異常,
調(diào)用Url對(duì)象的openConnection()方法,得到HttpUrlConnection對(duì)象,這里需要強(qiáng)轉(zhuǎn)
調(diào)用HttpUrlConnection對(duì)象的setRequestMethod()方法
調(diào)用HttpUrlConnection對(duì)象的setConnectTimeout()方法
調(diào)用HttpUrlConnection對(duì)象的setRequestProperty()方法
調(diào)用HttpUrlConnection對(duì)象的getResponseCode()方法,得到響應(yīng)碼,進(jìn)行判斷
調(diào)用HttpUrlConnection對(duì)象的getInputStream()方法,得到InputStream對(duì)象
?
把流的數(shù)據(jù)轉(zhuǎn)換成文本,是一個(gè)非常常用的操作,新建一個(gè)包utils,放工具類
新建一個(gè)類StreamTools,里面定義一個(gè)靜態(tài)方法readInputStream()
獲取ByteArrayOutputStream對(duì)象,通過(guò)new一個(gè)字節(jié)數(shù)組輸出流
定義一個(gè)int的len長(zhǎng)度是0
定義一個(gè)byte[]的數(shù)組,通過(guò)new?byte[1024]定義一個(gè)1024字節(jié)的數(shù)組
定義一個(gè)while循環(huán),條件是調(diào)用InputStream對(duì)象的read(buffer)方法,參數(shù):上面定義的byte[]數(shù)組,把數(shù)據(jù)讀入到byte[]數(shù)組里面,返回一個(gè)讀取的長(zhǎng)度,如果長(zhǎng)度等于-1那就是讀到末尾了,因此這個(gè)進(jìn)行循環(huán)判斷
調(diào)用ByteArrayOutputStream對(duì)象的write(buffer,0,len)方法,讀取字節(jié)數(shù)組,從0開(kāi)始到len長(zhǎng)度
循環(huán)完成之后,關(guān)閉輸入流,調(diào)用ByteArrayOutputStream對(duì)象的toByteArray()得到一個(gè)字節(jié)數(shù)組,return出來(lái)用new?String()包裝一下
?
調(diào)用Handler對(duì)象的sendMessage()方法發(fā)送數(shù)據(jù)
?
當(dāng)設(shè)置請(qǐng)求參數(shù)的時(shí)候,不能多加冒號(hào),否則容易出錯(cuò)
package com.tsh.hrmlviewer;import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL;import com.tsh.hrmlviewer.utils.StreamTools;import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.TextUtils; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast;public class MainActivity extends Activity {protected static final int SUCCESS = 1;protected static final int ERROR = 2;private EditText et_path;private TextView tv_show;// 消息處理器public Handler handler = new Handler() {public void handleMessage(Message msg) {switch (msg.what) {case SUCCESS:String text = (String) msg.obj;tv_show.setText(text);break;case ERROR:Toast.makeText(MainActivity.this, "獲取數(shù)據(jù)失敗", 0).show();break;}};};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);et_path = (EditText) findViewById(R.id.et_path);tv_show = (TextView) findViewById(R.id.tv_show);}// 查看public void click(View v) {final String path = et_path.getText().toString().trim();if (TextUtils.isEmpty(path)) {Toast.makeText(this, "請(qǐng)輸入網(wǎng)址", 0).show();} else {// 開(kāi)啟新線程new Thread() {public void run() {try {URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");conn.setConnectTimeout(5000);int code = conn.getResponseCode();if (code == 200) {InputStream is = conn.getInputStream();String res = StreamTools.readInputStream(is);Message msg = new Message();msg.what = SUCCESS;msg.obj = res;handler.sendMessage(msg);} else {Message msg = new Message();msg.what = ERROR;handler.sendMessage(msg);}} catch (Exception e) {e.printStackTrace();Message msg = new Message();msg.what = ERROR;handler.sendMessage(msg);}}}.start();}}}工具類:
package com.tsh.hrmlviewer.utils;import java.io.ByteArrayOutputStream; import java.io.InputStream;public class StreamTools {/*** 讀取輸入流* @param is* @return*/public static String readInputStream(InputStream is){ByteArrayOutputStream baos=new ByteArrayOutputStream();int len=0;byte[] buffer=new byte[1024];try {while((len=is.read(buffer))!=-1){baos.write(buffer,0,len);}is.close();byte[] res=baos.toByteArray();return new String(res);} catch (Exception e) {e.printStackTrace();}return null;} }?
轉(zhuǎn)載于:https://www.cnblogs.com/taoshihan/p/5289742.html
總結(jié)
以上是生活随笔為你收集整理的[android] 网络html查看器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python实现文件下载的方法总结
- 下一篇: 一些当前 Node.js 中最流行 ES