1

I am having networkonmainthread exception even if my network call is inside an asynctask. I call MyAsynctask to get the okhttp response and convert it to my object after.

I read some SO Post like this

1. Calling doInBackground - I'm not calling doInBackground as stated in answer I'm calling execute then get.

My Code in calling the request is.

Response response = new MyAsyncUtils.MyTask().execute(params).get();

Method

public MyObject getMyObject(){
    GenericAsyncParams params = new GenericAsyncParams(customParams.....);
    Response response = new MyAsyncUtils.MyTask().execute(params).get();
    final MyObject myObject =
      om.readValue(response.body().string(), new TypeReference<MyObject>() {
      });

    return myObject;
}

My AsyncTask is in a Utility class that I re-use.

public static class MyAsynctask extends AsyncTask<GenericAsyncParams, Void, Response>{

    @Override
    protected Response doInBackground(GenericAsyncParams... genericAsyncParamses) {
        Response response = null;
        GenericAsyncParams genericAsyncParams = genericAsyncParamses[0];
        String url = genericAsyncParams.getUrl();
        String method = genericAsyncParams.getMethod();
        RequestProcessor requestProcessor = genericAsyncParams.getRequestProcessor();

        try {
            Request.Builder builder;
            if(method.equalsIgnoreCase("POST")){
                builder = new Request.Builder()
                        .post(genericAsyncParams.getRequestBody())
                        .url(url)
                        .headers(headers);
            } else  {
                builder = new Request.Builder()
                        .headers(headers)
                        .get()
                        .url(url);
            }
            final Request request = builder.build();
            response = requestProcessor.client().newCall(request).execute();
            return response;
        } catch (Exception e){
            Log.e(TAG, String.format("ERROR.. %s", ExceptionUtils.getMessage(e)));
        }

        return response;
    }
}

Now, I may have a resolution for this, I can use callback on postExecute then use CountDownLatch to wait for the callback response before returning it to the method caller, but if there's a better way to do it please let me know guys!

Thanks!

Aaron
  • 2,591
  • 4
  • 27
  • 45

0 Answers0