I often use a similar scheme work with an API project. Can it be made easier, or is there a standard approach?
This class creates an API request:
public class ApiRequestCreator {
private static String TEST_API_REQUEST = "http://jsonplaceholder.typicode.com/posts";
public static Request createTestApiRequest(){
return new Request.Builder()
.url(TEST_API_REQUEST)
.build();
}
}
This class execute the request:
public class ApiRequestExecutor {
private final OkHttpClient client = new OkHttpClient();
public void run(final Request request, final ApiMethodListener apiMethodListener) {
new AsyncTask<Void, Void, String>() {
@Override
protected String doInBackground(Void ...voids) {
try {
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
return response.body().string();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
apiMethodListener.result(result);
}
}.execute();
}
}
For all of this to start:
new ApiRequestExecutor().run(ApiRequestCreator.createTestApiRequest(), call_back_interface_here);
1 Answer 1
Your code looks good, but in my opinion AsyncTasks are good for single operations - it's not pleasant to make AsyncTask reusable. In my projects I use Ion to download some JSON data from API. This (and similar) library is prepared for making API calls, so it's easier and more ellegant to use for network requests.
Explore related questions
See similar questions with these tags.