java - 检查 Android 上的页面是否已启动会导致崩溃吗?

标签 java android httpurlconnection

我对 Android 还很陌生。我已经用 Java 完成了一些工作,所以我返回并找到了我的站点状态检查器。

我的想法是,因为 Android 是基于 Java 的,所以我可以直接复制到 Android 应用程序。

这是我的 fragment :

public boolean checkIfSite(String url) {
    HttpURLConnection connection = null;
    try {
        URL u = new URL(url);
        connection = (HttpURLConnection) u.openConnection();
        connection.setRequestMethod("HEAD");
        int code = connection.getResponseCode();
        System.out.println("" + code);
        // You can determine on HTTP return code received. 200 is success.

        return true;
    } catch (MalformedURLException e) {
        e.printStackTrace();
        return false;
    } catch (IOException e) {
        e.printStackTrace();
        return false;
    } finally {
        if (connection != null) {
            connection.disconnect();
        }
    }
}

我这样调用它:

if (checkIfSite("http://google.com")) {
//CODE
}

这是我得到的跟踪:

    01-05 08:58:49.683: D/AndroidRuntime(9767): Shutting down VM
01-05 08:58:49.683: W/dalvikvm(9767): threadid=1: thread exiting with uncaught exception (group=0x40a211f8)
01-05 08:58:49.691: E/AndroidRuntime(9767): FATAL EXCEPTION: main
01-05 08:58:49.691: E/AndroidRuntime(9767): android.os.NetworkOnMainThreadException
01-05 08:58:49.691: E/AndroidRuntime(9767):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at java.net.InetAddress.getAllByName(InetAddress.java:220)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:71)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at libcore.net.http.HttpEngine.connect(HttpEngine.java:303)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:479)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at com.sonyericsson.extras.liveview.plugins.sandbox.SandboxPluginService.checkIfSite(SandboxPluginService.java:184)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at com.sonyericsson.extras.liveview.plugins.sandbox.SandboxPluginService.button(SandboxPluginService.java:209)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at com.sonyericsson.extras.liveview.plugins.AbstractPluginService$LiveViewCallback$3.run(AbstractPluginService.java:200)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at android.os.Handler.handleCallback(Handler.java:605)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at android.os.Handler.dispatchMessage(Handler.java:92)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at android.os.Looper.loop(Looper.java:137)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at android.app.ActivityThread.main(ActivityThread.java:4424)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at java.lang.reflect.Method.invokeNative(Native Method)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at java.lang.reflect.Method.invoke(Method.java:511)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
01-05 08:58:49.691: E/AndroidRuntime(9767):     at dalvik.system.NativeStart.main(Native Method)

最佳答案

您是否考虑过通过添加permission来让您的App上线?至 AndroidMainfest.xml文件?该文件位于项目结构的顶层,如 srcres 文件夹。

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

当您尝试在 UI 线程上执行网络操作时,会引发异常。 解决方案here ...

有关 AsyncTask 的更多信息:

关于java - 检查 Android 上的页面是否已启动会导致崩溃吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14173477/

相关文章:

java - 如何使用带有查询参数的 HttpURLConnection PUT?

java - Android HttpUrlConnection 传递 header 参数

java - 如何使用 Ajax 和 Struts2 将表单数据发送到 ActionSupport

java - 如何使用java程序知道数据库是否更新

java - 如何使用 java 发送 JSON 字符串数组的 HTTP post 请求?

android - 似乎无法从 ionic 项目生成 APK

java - 关于在 JNI 中分配的数组

java - 如何退出或退出从 Java 中的主 JWindow 创建的从属 JWindow?

android - 当我启动 Paypal 服务时,应用程序屏幕变黑并卡住

java - "java.net.ConnectException: Connection timed out"和 "java.net.SocketTimeoutException: connect timed out"之间的确切区别是什么?