java - HttpUrlConnection fatal error

标签 java android http

我在使用 HttpUrlConnection 类时遇到 Android 问题,我的方法是这样的:

public InputStream test() {
        URL url = null;
        try {
            url = new URL("http://www.android.com/");
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       HttpURLConnection urlConnection = null;
    try {
        urlConnection = (HttpURLConnection) url.openConnection();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    InputStream in= null;

       try {
         in = new BufferedInputStream(urlConnection.getInputStream());
       }catch(IOException e){
           e.printStackTrace();
       }
        finally {
         urlConnection.disconnect();
       }
return in;
}

当我执行此方法时,android 会生成此异常:

05-03 15:15:19.116: W/System.err(1085): android.os.NetworkOnMainThreadException 05-03 15:15:19.116: W/System.err(1085): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099) 05-03 15:15:19.116: W/System.err(1085): at java.net.InetAddress.lookupHostByName(InetAddress.java:391) 05-03 15:15:19.116: W/System.err(1085): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242) 05-03 15:15:19.116: W/System.err(1085): at java.net.InetAddress.getAllByName(InetAddress.java:220) 05-03 15:15:19.126: W/System.err(1085): at libcore.net.http.HttpConnection.(HttpConnection.java:71) 05-03 15:15:19.126: W/System.err(1085): at libcore.net.http.HttpConnection.(HttpConnection.java:50) 05-03 15:15:19.126: W/System.err(1085): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:351) 05-03 15:15:19.126: W/System.err(1085): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:86) 05-03 15:15:19.126: W/System.err(1085): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128) 05-03 15:15:19.126: W/System.err(1085): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308) 05-03 15:15:19.126: W/System.err(1085): at libcore.net.http.HttpEngine.connect(HttpEngine.java:303) 05-03 15:15:19.126: W/System.err(1085): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282) 05-03 15:15:19.126: W/System.err(1085): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232) 05-03 15:15:19.126: W/System.err(1085): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273) 05-03 15:15:19.136: W/System.err(1085): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168) 05-03 15:15:19.136: W/System.err(1085): at com.BertacchiMazzoni.HTTPClient.HttpClientTutorial.test(HttpClientTutorial.java:35) 05-03 15:15:19.136: W/System.err(1085): at com.BertacchiMazzoni.HTTPClient.HTTPClientActivity.onCreate(HTTPClientActivity.java:18) 05-03 15:15:19.136: W/System.err(1085): at android.app.Activity.performCreate(Activity.java:4465) 05-03 15:15:19.136: W/System.err(1085): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 05-03 15:15:19.136: W/System.err(1085): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 05-03 15:15:19.136: W/System.err(1085): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 05-03 15:15:19.136: W/System.err(1085): at android.app.ActivityThread.access$600(ActivityThread.java:123) 05-03 15:15:19.136: W/System.err(1085): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 05-03 15:15:19.146: W/System.err(1085): at android.os.Handler.dispatchMessage(Handler.java:99) 05-03 15:15:19.146: W/System.err(1085): at android.os.Looper.loop(Looper.java:137) 05-03 15:15:19.146: W/System.err(1085): at android.app.ActivityThread.main(ActivityThread.java:4424) 05-03 15:15:19.146: W/System.err(1085): at java.lang.reflect.Method.invokeNative(Native Method) 05-03 15:15:19.146: W/System.err(1085): at java.lang.reflect.Method.invoke(Method.java:511) 05-03 15:15:19.146: W/System.err(1085): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 05-03 15:15:19.146: W/System.err(1085): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 05-03 15:15:19.146: W/System.err(1085): at dalvik.system.NativeStart.main(Native Method)

我可以解决这个问题吗?错误在哪里?

非常感谢! 问候!

最佳答案

快速谷歌一下异常情况,你会看到这里:http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

其中规定:

The exception that is thrown when an application attempts to perform a networking operation on its main thread.

This is only thrown for applications targeting the Honeycomb SDK or higher. Applications targeting earlier SDK versions are allowed to do networking on their main event loop threads, but it's heavily discouraged. See the document Designing for Responsiveness.

所以基本上我猜测您正在主应用程序线程上执行网络操作;对于 Honeycomb 及以上版本,您似乎无法做到这一点。无论如何,这都是一个坏主意,因为它可能会使您的应用程序挂起并显得无响应。您需要使用另一个线程或处理程序或 asynctask 或 Loader 来执行该操作。

关于java - HttpUrlConnection fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10432344/

相关文章:

android - 带有 Flowable 的房间 : initialize database if it's empty

android - 在 Android 中旋转 MapView

android - 如何在 Activity 之间传递 ArrayList<HashMap<String, String>>?

java - RSA Premaster 密码错误

c# - 正在浏览我的网站的用户的 IP 地址

java - iText 7 - 重新生成使用 Adob​​e 创建的条形码字段

java - 如何在给定文件夹名称的情况下创建多个目录

java - java中的多个服务器TCP

java - 提交响应后无法调用 sendRedirect()

http - 为什么 Chrome 或 Safari 不能正确播放我的 MP3?