0

I want to excute a simple url get, I used the code inside this link http://developer.android.com/reference/java/net/HttpURLConnection.html

I want to run this code inside a click event:

URL url = new URL("http://www.android.com/");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
    InputStream in = new BufferedInputStream(urlConnection.getInputStream());
    readStream(in);}
finally {
    urlConnection.disconnect();
}

When I run the app I am getting this long error:

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.soma.smsserver1, PID: 20664 java.lang.IllegalStateException: Could not execute method for android:onClick at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:289) at android.view.View.performClick(View.java:5198) at android.view.View$PerformClick.run(View.java:21147) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) at android.view.View.performClick(View.java:5198)  at android.view.View$PerformClick.run(View.java:21147)  at android.os.Handler.handleCallback(Handler.java:739)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:148)  at android.app.ActivityThread.main(ActivityThread.java:5417)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  Caused by: android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273) at java.net.InetAddress.lookupHostByName(InetAddress.java:431) at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) at java.net.InetAddress.getAllByName(InetAddress.java:215) at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29) at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188) at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157) at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100) at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357) at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:384) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:231) at com.example.soma.smsserver1.MainActivity$override.clickMe(MainActivity.java:28) at com.example.soma.smsserver1.MainActivity$override.access$dispatch(MainActivity.java) at com.example.soma.smsserver1.MainActivity.clickMe(MainActivity.java:0) at java.lang.reflect.Method.invoke(Native Method)  at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)  at android.view.View.performClick(View.java:5198)  at android.view.View$PerformClick.run(View.java:21147)  at android.os.Handler.handleCallback(Handler.java:739)  at android.os.Handler.dispatchMessage(Handler.java:95)  at android.os.Looper.loop(Looper.java:148)  at android.app.ActivityThread.main(ActivityThread.java:5417)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

nabaz
  • 55
  • 9
  • Check out the answers on [this](http://stackoverflow.com/questions/9413625/android-android-os-networkonmainthreadexception) thread. You're probably performing the request on the main (UI) thread. You should use AsyncTask or the Volley library to perform the http request in the background. – Mootpoint Apr 13 '16 at 21:54

3 Answers3

0

android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1273)

you cannot process networking on the main thread, this is a security restriction on Android, try wrapping your call in AsyncTask a background service, or thread.

Please read documentation regarding Processes and Threads

kandroidj
  • 13,784
  • 5
  • 64
  • 76
0

You are doing a network Request on the MainThread, which is prohibited because it would block the UI during this call. You should use an other Thread to do this call, you have different options : Thread, AsyncTask, etc ...

Some examples here : http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html

Andros
  • 4,069
  • 1
  • 22
  • 30
0

you are handling network on Main Thread which will make your app hang so, you need to handle long running task on background service like AsyncTask check this link https://www.upwork.com/hiring/mobile/why-you-should-use-asynctask-in-android-development/

Durgesh Kumar
  • 935
  • 10
  • 17