gpt4 book ai didi

java - Android使用InputStream获取网站内容

转载 作者:行者123 更新时间:2023-12-01 08:57:55 30 4
gpt4 key购买 nike

我正在尝试在 Android 应用程序中获取网站的内容(其源代码)。

URL url = new URL("http://verbmaps.com/");
URLConnection con = url.openConnection();
con.setRequestProperty("User-Agent", "Mozilla/5.0");
InputStream is = con.getInputStream();

现在运行时会出现很多错误。

(我把这是一个 js fragment ,这样我就可以隐藏它)

/*

W/System.err: android.os.NetworkOnMainThreadException
W/System.err: at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
W/System.err: at java.net.InetAddress.lookupHostByName(InetAddress.java:431)
W/System.err: at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
W/System.err: at java.net.InetAddress.getAllByName(InetAddress.java:215)
W/System.err: at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)
W/System.err: at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188)
W/System.err: at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157)
W/System.err: at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)
W/System.err: at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)
W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433)
W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:384)
W/System.err: at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:231)
W/System.err: at com.example.yeeverbs.MainActivity$override.onCreate(MainActivity.java:41)
W/System.err: at com.example.yeeverbs.MainActivity$override.access$dispatch(MainActivity.java)
W/System.err: at com.example.yeeverbs.MainActivity.onCreate(MainActivity.java:0)
W/System.err: at android.app.Activity.performCreate(Activity.java:6237)
W/System.err: at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
W/System.err: at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
W/System.err: at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4077)
W/System.err: at android.app.ActivityThread.-wrap15(ActivityThread.java)
W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1350)
W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
W/System.err: at android.os.Looper.loop(Looper.java:148)
W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5417)
W/System.err: at java.lang.reflect.Method.invoke(Native Method)
W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)


*/

其中一个错误指向第 41 行,即带有 InputStream 的行:

InputStream is = con.getInputStream();

因此,我无法成功运行它。

附加说明

我的 Android Manifest 文件具有所需的权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

此外,我还发现一些解决方案使用 DefaultHttpClient 而不是 URL。我尝试了一下,但 Android Studio 告诉我它已被弃用。因此,我不得不重新使用 URL ,除非有其他更好的替代方案未被弃用。

此外,我尝试在没有任何外部库的情况下执行此操作,因此我不会接受 JSoup 或任何其他此类库。

简而言之,

我正在使用 URL 获取网站的源代码。但是 InputStream 给了我错误。

我想知道为什么会发生这种情况。此外,任何未弃用的更好替代方案或作为此任务的外部库的任何更好的替代方案都将受到赞赏。

最佳答案

正如错误所示,您正在主线程上进行网络调用。在 android 中,您应该在后台线程中执行任何此类调用。提示:检查 asyncTasks

关于java - Android使用InputStream获取网站内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41921572/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com