Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Java:HttpURLConnection_Java_Android_Http_Android Studio - Fatal编程技术网

Android Java:HttpURLConnection

Android Java:HttpURLConnection,java,android,http,android-studio,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(); }

我尝试探索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中得到一个空异常

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)
在Android Studio的模拟器上进行了尝试。网络连接似乎正常,模拟器中的Chrome运行良好

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

舱单上确实有

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

似乎您正在尝试在主UI线程内进行联网-这在11+中是禁止的。您需要使用
AsyncTask
AsyncLoader
来执行网络调用。

似乎您正在尝试在主UI线程内进行联网-这在11+中是禁止的。您需要使用
AsyncTask
AsyncLoader
来执行网络调用。

私有类任务扩展AsyncTask{
 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(); 
@凌驾 受保护的空位背景(空位…空位){ 尝试 { URL=新URL(“http://google.com"); HttpURLConnection uc=(HttpURLConnection)url.openConnection(); uc.setReadTimeout(10*1000); int rc=uc.getResponseCode(); Log.d(“rc”,rc+); } 捕获(例外e) { } 返回null; } } 新任务().execute();
您需要创建一个线程来处理网络调用。由于您在主线程上运行网络调用,因此它无法成功执行程序。

私有类任务扩展了异步任务{
@凌驾
受保护的空位背景(空位…空位){
尝试
{
URL=新URL(“http://google.com");
HttpURLConnection uc=(HttpURLConnection)url.openConnection();
uc.setReadTimeout(10*1000);
int rc=uc.getResponseCode();
Log.d(“rc”,rc+);
}
捕获(例外e)
{
}
返回null;
}
}
新任务().execute();

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

请在您的问题中添加完整的Logcat。除了在getResponseCode之前输入的任何日志输出之外,它没有什么特别之处。然后是异常getMessage()的“NULL”。我对堆栈跟踪感兴趣。我希望您不要抑制它。添加了堆栈跟踪。请在您的问题中添加完整的Logcat。除了在getResponseCode之前输入的任何日志输出之外,它没有什么特别之处。然后是异常getMessage()的“NULL”。我对堆栈跟踪感兴趣。我希望您不要抑制它。添加了堆栈跟踪。