Retrofit 2 — Ignore Response Payload with Call<Void>

In most cases, the server response payload to our request is the sole reason why we made the request. However, in some rare cases it doesn't matter to us at all. If you have an endpoint where you completely ignore the response payload (besides the status codes and headers), you can gain a little bit of performance with this tutorial.

Retrofit Series Overview

Call<User> vs. Call<ResponseBody> vs. Call<Void>

Most endpoints will be declared with a specific return type, like Call<User>. In this case Retrofit will always take the response body and try to convert it to Java objects. Of course, this takes time, memory and processing power.

If you can live without the mapped Java objects, you should choose Call<ResponseBody>. This makes the raw response payload available to you, but skips the mapping to Java objects. With this option, you still have the chance to analyze the payload (e.g., JSON).

The most efficient way is Call<Void> because it not only skips the conversion to Java objects, it also ignores the response body payload. When the response body is very large (e.g., a large JSON or an image), you can save a little bit of extra time and battery consumption by using Call<Void>. Of course, this results in the body() method of your response object returning null.

Overall, you should focus on macro optimization first (for example with caching) before stepping into the micro optimization with Call<Void>. But it's a fast and easy win.

Summary

In this tutorial you've seen how you can use Call<Void> for endpoints where you completely ignore the server response payload. This saves you a small amount of time and unnecessary processing.

Do you have further questions on this topic or about Retrofit in general? Just let us know on Twitter @futurestud_io or leave a comment below.

Enjoy coding & make it rock!

Explore the Library

Find interesting tutorials and solutions for your problems.