我尝试探索 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/