java - 安卓 Java : HttpURLConnection

标签 java android http android-studio

我尝试探索 Android 并做了一些示例。

这是我的代码。

    try
    {
        URL url = new URL("http://google.com");
        HttpURLConnection uc = (HttpURLConnection) url.openConnection();
        uc.setReadTimeout (10 * 1000);

        int rc = uc.getResponseCode();
    }
    catch (Exception e)
    {

    }

如果我在 Linux 下运行,它可以完美运行。

但是如果我将其放入 Android,我会在 getResponseCode 处收到 NULL 异常。

在Android Studio的模拟器中尝试过。网络连接似乎没问题,模拟器中的 Chrome 运行良好。

我在 onCreate 以及按钮的点击监听器中尝试过。 它是从 java.net 导入的。

list 确实有

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

包括在内。

有什么想法吗?谢谢!

编辑: 这就是调用 getResponseCode 后的 stackktrace。

D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.example.ch.my1stapplication, PID: 3435
              java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference
                  at com.example.ch.my1stapplication.MainActivity$4.onClick(MainActivity.java:173)
                  at android.view.View.performClick(View.java:5637)
                  at android.view.View$PerformClick.run(View.java:22429)
                  at android.os.Handler.handleCallback(Handler.java:751)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:154)
                  at android.app.ActivityThread.main(ActivityThread.java:6119)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

最佳答案

 private class Task extends AsyncTask<Void , Void , Void>{
        @Override
        protected Void doInBackground(Void... voids) {
            try
            {
                URL url = new URL("http://google.com");
                HttpURLConnection uc = (HttpURLConnection) url.openConnection();
                uc.setReadTimeout (10 * 1000);

                int rc = uc.getResponseCode();
                Log.d("rc" , rc+"");
            }
            catch (Exception e)
            {

            }
            return null;
        }
    }

 new Task().execute(); 

您需要创建一个线程来处理网络调用。由于您在主线程上运行网络调用,因此它没有成功执行程序。

关于java - 安卓 Java : HttpURLConnection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41493469/

相关文章:

android - Android 应用程序中带标签文本的实现概述文本字段输入

javascript - 响应 header 存在于浏览器中但未被 Angular $http response.headers() 解析

java - 使用 HTTPServlet 调用的相对路径

java - 如何从 ReactApplication 中的 ReactNativeHost 中获取 MainActivity (ReactActivity)

Javacard通过Java代码获取已安装小程序的小程序AID

java - 在 Java2D 中绘制子类的哪个组件(对于 2D 游戏)

java - 矩形中 JEditorPane 中的滚动条

java - 评论线程 : insert gives 403 Forbidden

android - Android 游戏的分辨率独立图形

PHP Curl 和 HttpRequest 的区别