Android correct way to use OKHTTP singleton for parallel queries with cookies

pratsJ picture pratsJ · Sep 15, 2014 · Viewed 7.6k times · Source

I am working on an android project in which I am planning to replace Apache httpclient implementation with OKHTTP client. I would like to know how I can create a global Client that can be used for networking requests in different activities and services that will use the multi-threading of client. Should I create a singleton object of OKHTTPClient and reuse it in my code?

Also, where should I add the cookiestore to the request, In the global definition of client so that I all requests will have cookie available or while forming the request in individual activity or service?

Answer

Phileo99 picture Phileo99 · Feb 8, 2015

The general approach to using OkHttp is one OkHttp instance with one HttpResponseCache instance. Whether it needs to be created as a singleton depends on the requirements of your application. For example, the single instance of OkHttp can be created in a subclass of Android's Application.onCreate(), in which case it doesn't need to be a singleton if you make your Android app's subclass of the Application class a singleton.

Quote from their wiki:

"Most applications should call new OkHttp() exactly once, configure it with their cache, and use that same instance everywhere. "

Once you have created your OkHttp instance, you can use their setCookieHandler() API method to add a persistent cookie store, which will be used in all subsequent HTTP requests. See this SO answer for further details on implementing a cookiestore that works with OkHttp.