I am trying to use okhttpclient with retrofit to setup caching... How do I setup the expiration and add it to my restApiManager? Not sure what service is suppose to be...
Here is the code:
public class ApiManager {
private static final String API_URL = "ip";
public static AsynchronousApi getInstance() {
if(service == null) {
OkHttpClient okHttpClient = new OkHttpClient();
File cacheDir = new File(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString());
HttpResponseCache cache = null;
try {
cache = new HttpResponseCache(cacheDir, 1024);
} catch (IOException e) {
e.printStackTrace();
}
okHttpClient.setResponseCache(cache);
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(API_URL)
.setLogLevel(RestAdapter.LogLevel.FULL)
.setClient(new OkClient(okHttpClient))
.setErrorHandler(new ErrorHandler() {
@Override
public Throwable handleError(RetrofitError arg0) {
if(arg0.getResponse().getStatus() == 404)
return new Exception("Url does not exists");
return new Exception(arg0.getMessage());
}
})
.build();
service = restAdapter.create(AsynchronousApi.class);
}
return service;
}
// //create adapter
private static final AsynchronousApi ASYNCHRONOUS_API = getInstance();
//call service to initiate
public static AsynchronousApi getAsyncApi() {
return ASYNCHRONOUS_API;
}
//Call interface
public interface AsynchronousApi {
//USER
//Register User
@FormUrlEncoded
@POST("/register")
public void registerUser(
@Field("email") String email,
@Field("username") String username,
@Field("password") String password,
Callback<UserResponse> callback); //
//Search User
@GET("/search_user")
public void searchUser(
@Query("username") String username,
Callback<UserResponse> callback); // userfound cache users
You are using the com.squareup.okhttp.OkHttpClient but you should rather use retrofit.client.OKClient which takes OkHttpClient as a parameter. Also if okhttp jar is already in your path you dont need to use this code at all. Only perhaps if you are facing trouble with cache availability.