-5

I am using https://github.com/kevinsawicki/http-request and I am trying to use one of the examples from it. This is my Android code:

try{
 String response = HttpRequest.get("http://google.com").body();
 System.out.println("Response was: " + response);
}
catch (NetworkOnMainThreadException e){
 Toast.makeText(this, e.toString(), Toast.LENGTH_LONG).show();
}

I get this error: Android.os.NetworkOnMainThreadExeption. And from my Android Monitor I get:

FATAL EXCEPTION: main Process: com.nettport.dietbystram.dietbystram, PID: 11523 java.lang.RuntimeException: Unable to start activity ComponentInfo{SignUp}: android.os.NetworkOnMainThreadException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6540) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) Caused by: android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1425) at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:102) at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:90) at java.net.InetAddress.getAllByName(InetAddress.java:787) at com.android.okhttp.Dns$1.lookup(Dns.java:39) at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:175) at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:141) at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:83) at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:174) at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:126) at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:95) at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:281) at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:224) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:461) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:407) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getHeaders(HttpURLConnectionImpl.java:163) at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getHeaderField(HttpURLConnectionImpl.java:207) at mypackage.HttpRequest.header(HttpRequest.java:2093) at mypackage.HttpRequest.parameter(HttpRequest.java:2188) at mypackage.HttpRequest.charset(HttpRequest.java:2298) at mypackage.HttpRequest.body(HttpRequest.java:1758) at mypackage.SignUp.sendToPHP(SignUp.java:1529) at mypackage.SignUp.onCreate(SignUp.java:81) at android.app.Activity.performCreate(Activity.java:6980) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)  at android.app.ActivityThread.-wrap11(Unknown Source:0)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)  at android.os.Handler.dispatchMessage(Handler.java:105)  at android.os.Looper.loop(Looper.java:164)  at android.app.ActivityThread.main(ActivityThread.java:6540)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

Solo
  • 569
  • 1
  • 7
  • 27

1 Answers1

2

Perform the same in this

     private class LongOperation extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
           String response = HttpRequest.get("http://google.com").body();
 System.out.println("Response was: " + response);
            return response ;
        }

        @Override
        protected void onPostExecute(String result) {

        }

        @Override
        protected void onPreExecute() {}

        @Override
        protected void onProgressUpdate(Void... values) {}
    }

Start it in your onCreate like this new LongOperation().execute("");

MRX
  • 1,400
  • 3
  • 12
  • 32
  • Should I build a LongOperation for every thing I want to check? Example LongOperationIsEmailTaken, LongOperationRegisterNewUser, LongOperationCheckLogin etc – Solo Jun 27 '17 at 14:24
  • 1
    There are example where you can make generic Asych task. You can google it for more results. Else If you think that anything which takes time and can be done in background should either be in asych task , services , threads or third party library such as Bolt : https://github.com/BoltsFramework/Bolts-Android – MRX Jun 28 '17 at 05:49