简体   繁体   English

URLConnection:无法发出获取请求

[英]URLConnection: unable to make get request

I am trying to access restful resource from Android app using URLConnection, 我正在尝试使用URLConnection从Android应用访问宁静的资源,

public void onClick(View v) {

    try {
        URL url = new URL("http://192.168.43.45:8080/entity");
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setRequestMethod("GET");
        urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0");
        InputStream stream = urlConnection.getInputStream();
        InputStreamReader reader = new InputStreamReader(stream);
        BufferedReader bufferedReader = new BufferedReader(reader);
        String line ;
        while ((line = bufferedReader.readLine()) != null) {
            System.out.println(line);
        }
        bufferedReader.close();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

It is throwing this error: 它抛出此错误:

11-10 07:51:33.194 17672-17672/in.co.palup.android D/AndroidRuntime: Shutting down VM
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime: FATAL EXCEPTION: main
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime: Process: in.co.palup.android, PID: 17672
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime: android.os.NetworkOnMainThreadException
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:110)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at libcore.io.IoBridge.connect(IoBridge.java:122)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:452)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at java.net.Socket.connect(Socket.java:884)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at com.android.okhttp.internal.Platform.connectSocket(Platform.java:117)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at com.android.okhttp.internal.http.SocketConnector.connectRawSocket(SocketConnector.java:160)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at com.android.okhttp.internal.http.SocketConnector.connectCleartext(SocketConnector.java:67)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at com.android.okhttp.Connection.connect(Connection.java:152)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:185)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:128)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:341)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:384)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:231)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at in.co.palup.android.EventCreation$4.onClick(EventCreation.java:203)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at android.view.View.performClick(View.java:5198)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:21147)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:739)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5417)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
11-10 07:51:33.195 17672-17672/in.co.palup.android E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

You will have to use thread for http call, as per below or you can use Asynctask . 您将必须按照以下方式使用线程进行http调用,或者可以使用Asynctask

 public void onClick(View v) {

    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                URL url = new URL("http://192.168.43.45:8080/entity");
                HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                urlConnection.setRequestMethod("GET");
                urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0");
                InputStream stream = urlConnection.getInputStream();
                InputStreamReader reader = new InputStreamReader(stream);
                BufferedReader bufferedReader = new BufferedReader(reader);
                String line;
                while ((line = bufferedReader.readLine()) != null) {
                    System.out.println(line);
                }
                bufferedReader.close();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }).start();

}

It seem duplicate with many topic. 似乎与许多主题重复。 Just research before create question 在提出问题之前进行研究

You can see answer here: How to fix android.os.NetworkOnMainThreadException? 您可以在此处看到答案: 如何修复android.os.NetworkOnMainThreadException?

This exception is thrown when an application attempts to perform a networking operation on its main thread. 当应用程序尝试在其主线程上执行联网操作时,将引发此异常。 Run your code in AsyncTask 在AsyncTask中运行您的代码

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM