java – Android:将网页的HTML读入字符串
发布时间:2020-12-15 04:56:26 所属栏目:Java 来源:网络整理
导读:我是 Android开发的新手,我正在尝试阅读网页的HTML并将其存储在下面的字符串(“myHTML”)中,并将其显示在应用程序上. 但是,只要运行,应用程序就会结束.我一直在网上搜索这个原因,并且发现一些文章说由于其“昂贵”的性质,无法在应用程序的主UI线程中完成互联
我是
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? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 阿里P8 Java高级架构师,都需要掌握哪些技术栈?
- My eclipse 端口占用(9360)问题解决办法
- java – 从arrayList中删除随机索引
- [Java复习05] 多线程&并发 知识点补充
- java – Spring Boot安全性在登录失败后显示Http-Basic-Aut
- Java知识点11 Hibernate多对多单向关联(Annotation+XML实现
- [转帖]关于Java中SQL语句的拼接规则
- java – GZip用于Coldfusion输出的字符串导致浏览器中的“内
- java – 覆盖接口中的方法是有意义的
- java – SBT build,在Compile上运行子项目的主类并运行