【问题标题】:URL connection failed with androidandroid 的 URL 连接失败
【发布时间】:2012-04-20 15:22:13
【问题描述】:

我厌倦了 oracle 的例子,用 android 从 URLConnection 中读取 这是代码

``try{
            URL oracle = new URL("http://www.oracle.com/");
            Proxy proxy = new Proxy(Proxy.Type.HTTP,newInetSocketAddress("192.168.3.254",3128)); // or whatever your proxy is
            URLConnection yc = oracle.openConnection(proxy);
            BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream()));
            String inputLine;
            while ((inputLine = in.readLine()) != null) 
               Toast.makeText(this, inputLine, Toast.LENGTH_SHORT);
            in.close();
        }
    catch(IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

我注意到我的代理模拟器设置已配置 我有这个日志错误

>04-20 14:20:21.842: D/AndroidRuntime(988): 关闭 VM 04-20 14:20:21.842: W/dalvikvm(988): threadid=1: 线程以未捕获的异常退出 (group=0x409c01f8) 04-20 14:20:21.862:E/AndroidRuntime(988):致命异常:主要 04-20 14:20:21.862: E/AndroidRuntime(988): java.lang.RuntimeException: 无法启动活动 ComponentInfo{connect.oracle.java/connect.oracle.java.ConnectActivity}: android.os.NetworkOnMainThreadException 04-20 14:20:21.862: E/AndroidRuntime(988): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 android.app.ActivityThread.access$600(ActivityThread.java:123) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 android.os.Handler.dispatchMessage(Handler.java:99) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 android.os.Looper.loop(Looper.java:137) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 android.app.ActivityThread.main(ActivityThread.java:4424) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 java.lang.reflect.Method.invokeNative(Native Method) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 java.lang.reflect.Method.invoke(Method.java:511) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 04-20 14:20:21.862: E/AndroidRuntime(988): at dalvik.system.NativeStart.main(Native Method) 04-20 14:20:21.862: E/AndroidRuntime(988): 由: android.os.NetworkOnMainThreadException 引起 04-20 14:20:21.862: E/AndroidRuntime(988): 在 android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 java.net.InetAddress.getHostByAddrImpl(InetAddress.java:440) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 java.net.InetAddress.getHostName(InetAddress.java:313) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 java.net.InetSocketAddress.getHostName(InetSocketAddress.java:156) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 libcore.net.http.HttpConnection$Address.(HttpConnection.java:322) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 libcore.net.http.HttpConnection.connect(HttpConnection.java:96) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 libcore.net.http.HttpEngine.connect(HttpEngine.java:303) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 connect.oracle.java.ConnectActivity.onCreate(ConnectActivity.java:22) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 android.app.Activity.performCreate(Activity.java:4465) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 04-20 14:20:21.862: E/AndroidRuntime(988): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 04-20 14:20:21.862: E/AndroidRuntime(988): ... 11 更多

提前谢谢你

【问题讨论】:

  • 你的代码如何编译?你不能在没有赋值的情况下声明像 inputLine 这样的局部变量。

标签: java android urlconnection


【解决方案1】:

你有Strict Mode。当您阻止 UI 线程执行缓慢的 IO 操作时,它会抱怨。

要么关闭严格模式,要么 - 总是更好的选择 - 将 IO 代码移动到后台线程。

【讨论】:

    【解决方案2】:

    您的清单文件中是否添加了互联网权限?

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

    【讨论】:

      【解决方案3】:

      将 IO 代码移动到后台线程(或)异步任务(如果符合您的要求)。在主线程上使用网络调用不是最佳实践。请参考此write-up

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多