java – Android:将网页的HTML读入字符串
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Android:将网页的HTML读入字符串,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5798字,纯文字阅读大概需要9分钟。
内容图文
![java – Android:将网页的HTML读入字符串](/upload/InfoBanner/zyjiaocheng/760/5d2a961bee184ed1810d50cca952710f.jpg)
我是Android开发的新手,我正在尝试阅读网页的HTML并将其存储在下面的字符串(“myHTML”)中,并将其显示在应用程序上.
但是,只要运行,应用程序就会结束.我一直在网上搜索这个原因,并且发现一些文章说由于其“昂贵”的性质,无法在应用程序的主UI线程中完成互联网访问.有没有人遇到过类似的问题?我会很感激有关这个问题的任何进一步信息…在初学者级别:)
这是程序:
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.regex.*;
import java.net.*;
import java.io.*;
/*
* Gets A webpage's HTML and saves to a string
*/
public String WebPageToHTML(String Webpage) throws IOException{
URL x = new URL(Webpage);
BufferedReader in = new BufferedReader(
new InputStreamReader(
x.openStream()));
String y = "";
String inputLine;
while ((inputLine = in.readLine()) != null)
y = y.concat(inputLine);
in.close();
return y;
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = new TextView(this);
String FirstAddress = "http://www.google.com";
String myHTML = "";
try {
myHTML = WebPageToHTML(FirstAddress);
} catch (IOException e) {
e.printStackTrace();
}
tv.setText(myHTML);
setContentView(tv);
}
logcat的:
12-29 14:41:44.441: E/AndroidRuntime(540): java.lang.RuntimeException: Unable to start activity ComponentInfo{my.first.app/my.first.app.WhatHaveIMissedActivity}: android.os.NetworkOnMainThreadException
12-29 14:41:44.441: E/AndroidRuntime(540): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
12-29 14:41:44.441: E/AndroidRuntime(540): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
12-29 14:41:44.441: E/AndroidRuntime(540): at android.app.ActivityThread.access$600(ActivityThread.java:123)
12-29 14:41:44.441: E/AndroidRuntime(540): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
12-29 14:41:44.441: E/AndroidRuntime(540): at android.os.Handler.dispatchMessage(Handler.java:99)
12-29 14:41:44.441: E/AndroidRuntime(540): at android.os.Looper.loop(Looper.java:137)
12-29 14:41:44.441: E/AndroidRuntime(540): at android.app.ActivityThread.main(ActivityThread.java:4424)
12-29 14:41:44.441: E/AndroidRuntime(540): at java.lang.reflect.Method.invokeNative(Native Method)
12-29 14:41:44.441: E/AndroidRuntime(540): at java.lang.reflect.Method.invoke(Method.java:511)
12-29 14:41:44.441: E/AndroidRuntime(540): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-29 14:41:44.441: E/AndroidRuntime(540): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-29 14:41:44.441: E/AndroidRuntime(540): at dalvik.system.NativeStart.main(Native Method)
12-29 14:41:44.441: E/AndroidRuntime(540): Caused by: android.os.NetworkOnMainThreadException
12-29 14:41:44.441: E/AndroidRuntime(540): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
12-29 14:41:44.441: E/AndroidRuntime(540): at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
12-29 14:41:44.441: E/AndroidRuntime(540): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
12-29 14:41:44.441: E/AndroidRuntime(540): at java.net.InetAddress.getAllByName(InetAddress.java:220)
12-29 14:41:44.441: E/AndroidRuntime(540): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)
12-29 14:41:44.441: E/AndroidRuntime(540): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
12-29 14:41:44.441: E/AndroidRuntime(540): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
12-29 14:41:44.441: E/AndroidRuntime(540): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
12-29 14:41:44.441: E/AndroidRuntime(540): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
12-29 14:41:44.441: E/AndroidRuntime(540): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
12-29 14:41:44.441: E/AndroidRuntime(540): at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
12-29 14:41:44.441: E/AndroidRuntime(540): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
12-29 14:41:44.441: E/AndroidRuntime(540): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
12-29 14:41:44.441: E/AndroidRuntime(540): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
12-29 14:41:44.441: E/AndroidRuntime(540): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
12-29 14:41:44.441: E/AndroidRuntime(540): at java.net.URL.openStream(URL.java:462)
12-29 14:41:44.441: E/AndroidRuntime(540): at my.first.app.WhatHaveIMissedActivity.WebPageToHTML(WhatHaveIMissedActivity.java:71)
12-29 14:41:44.441: E/AndroidRuntime(540): at my.first.app.WhatHaveIMissedActivity.onCreate(WhatHaveIMissedActivity.java:99)
12-29 14:41:44.441: E/AndroidRuntime(540): at android.app.Activity.performCreate(Activity.java:4465)
12-29 14:41:44.441: E/AndroidRuntime(540): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
12-29 14:41:44.441: E/AndroidRuntime(540): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
12-29 14:41:44.441: E/AndroidRuntime(540): ... 11 more
解决方法:
您可以使用HttpClient来请求此信息.它将同步完成,但您也可以发出异步请求.
String myUri = "http://www.whatever.com";
HttpClient httpClient = new DefaultHttpClient();
HttpGet get = new HttpGet(myUri);
HttpResponse response = httpClient.execute(get);
// Build up result
String bodyHtml = EntityUtils.toString(response.getEntity());
您还需要将以下内容添加到应用程序的清单文件中.
<uses-permission android:name="android.permission.INTERNET" />
关于如何使用AsyncTask包装它的一个很好的线程是:Common class for AsyncTask in Android?
内容总结
以上是互联网集市为您收集整理的java – Android:将网页的HTML读入字符串全部内容,希望文章能够帮你解决java – Android:将网页的HTML读入字符串所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。