【问题标题】:Trying to make use of httpCache android?试图利用 httpCache android?
【发布时间】:2014-04-22 02:46:51
【问题描述】:

我正在尝试使用带有改造功能的 okhttpclient 来设置缓存...如何设置过期时间并将其添加到我的 restApiManager?不知道应该是什么服务......

代码如下:

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

【问题讨论】:

  • 你用的是哪个版本的改造和okhttp?
  • 我假设你在回答之前问过这个问题,但是是的,我使用的是方形版本
  • 只要确保您使用的是最新的改造和 okhttp 最新的 jars。我记得它的 1.4.1 和 1.51
  • 在你的回答下阅读我的评论是不正确的,它不会自动缓存......

标签: android retrofit okhttp


【解决方案1】:

您正在使用 com.squareup.okhttp.OkHttpClient 但您应该使用以 OkHttpClient 作为参数的 retrofit.client.OKClient。此外,如果 okhttp jar 已经在您的路径中,您根本不需要使用此代码。只有当您遇到缓存可用性问题时才可能。

 private static RestAdapter REST_ADAPTER = new RestAdapter.Builder()
        .setEndpoint(API_URL)
        .setLogLevel(RestAdapter.LogLevel.FULL)
        .setClient(new OkClient(okHttpClient))
        .build();

【讨论】:

  • 哦,好吧,我路径中的 okhttp jar 是指改造版本吗?你的意思是什么,我根本不需要使用它——就像它会自动缓存,因为它在那里看到了 okhttp?
  • 是的,它会自动缓存,只要确保你的路径中有改造和 okhttp。但请记住,只有 Get 请求会被缓存。
  • 非常感谢,所以我不需要设置整个缓存方法,如果我理解你是正确的,只要我有 okhttp 和改造作为库?
  • 是的!毫无疑问。
  • 顺便问一下,你为什么在你的问题中称呼它?我确实想实现它以确保可用性,请参阅新方法 2,也许您可​​以看到我需要用什么来替换服务,或者我现在是否正确使用它......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 2018-08-17
  • 2021-12-30
相关资源
最近更新 更多