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!