page contents

HTML查看器简单介绍

实现的功能:借助于服务端,让Android获取服务端html内容 用到知识: 1)Handler初步了解 2)根据给定的url访问网络, 抓去html代码 3)将InputStream流转换成字符串信息,并在转换的过程...

attachments-2021-06-o90iaVIH60b99c4e9bf6b.png

实现的功能:借助于服务端,让Android获取服务端html内容

用到知识:

1)Handler初步了解

2)根据给定的url访问网络, 抓去html代码

3)将InputStream流转换成字符串信息,并在转换的过程中通过将String转换成字符数组进行编码

主要代码:

private static final String TAG = "MainActivity";
private static final int SUCCESS = 0;
protected static final int ERROR = 1;
private EditText etUrl;
private TextView tvHtml;

priva<strong>te Handler handler = new Handler()</strong> {
 
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case SUCCESS:
<strong>tvHtml.setText((String) msg.obj);</strong>
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() {
// 请求网络
<strong>String html = getHtmlFromInternet(url);</strong>

if(!<strong>TextUtils.isEmpty(html)</strong>) {
// 更新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<strong> getHtmlFromInternet(String url)</strong> {

try {
<strong>URL mURL = new URL(url);
HttpURLConnection conn = (HttpURLConnection) mURL.openConnection();</strong>

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

<strong>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";
}</strong>

html = new String(baos.toByteArray(), charset);// 对原有的字节数组进行使用处理后的编码名称进行编码
baos.close();
return html;
}

结果如下:

attachments-2021-06-0RukUe4Y60b99c034adad.png


更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

程序员编程交流QQ群:805358732

如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。

attachments-2022-06-EeqMQLFp62ac259409bad.jpeg

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章