【问题标题】:How can I save a OkHttp Client object?如何保存 OkHttp 客户端对象?
【发布时间】:2019-12-10 08:36:46
【问题描述】:

我正在使用当前存储库作为我工作的库。我想让应用程序能够在 SharedPreferences 上保存凭据,即 Persistent Memory。

我尝试过使用 ObjectOutputStream,但它告诉我 OkHttp 客户端不可序列化。

有什么线索吗?

https://github.com/charlieAndroidDev/Instagram4Android/blob/master/app/src/main/java/dev/niekirk/com/instagram4android/Instagram4Android.java

【问题讨论】:

  • 您绝对不想将您的客户端保存到共享状态....您可能希望保存您拥有的凭据,以便在应用加载时重新制作客户端,而不是客户端本身
  • 您需要序列化到您的对象/类/pojo,然后使用 Gson 库来保存和检索您对共享首选项的对象。 github.com/google/gson
  • 这是 Instagram 中的一个会话。因此,即使在清理内存时也需要保存它。 @奎因
  • 目前,它只是保存“用户信息”并使用它来登录并再次登录。这个想法是修改库或应用程序以保持会话处于活动状态(“或检查它是否处于活动状态”)。我以前有一个只保存饼干罐的对象,但它有点错误。因此,我想保存整个对象。
  • @CrecimientoOrgánico 我认为修复你有问题的饼干罐会是更好的做法。您可以保留您可能与服务器共享的身份验证令牌和密钥,但保存客户端对象本身是没有意义的。

标签: java android okhttp


【解决方案1】:

考虑一个不必保存整个 OkHttpClient 的替代方案:

创建一个缓存模型对象,以保存用于发出请求的所有有用信息

CacheModel cache = new CacheModel(this.userId, loginResult.getLogged_in_user().getPk(), this.rankToken, this.userId, this.uuid);

然后使用 Gson https://github.com/google/gson 或其他一些实用程序将其转换为字符串,然后您可以根据需要保存和检索此 cache 对象。

Gson gson = new Gson();
String cacheThisValue = gson.toJson(cache); 

和检索

CacheModel cache = gson.fromJson(cacheValueAsString, CacheModel.class);

【讨论】:

    【解决方案2】:

    您可以使用kesho library 使用 timeToLive 和加密保存任何内容。

    文档链接here

    使用首先从 kesho 创建一个新实例

       val kesho = Kesho(context, Kesho.SHARED_PREFERENCES_MANAGER)
    

    将数据添加到缓存

       kesho.push(KEY_OBJECT, your_value)
    

    从缓存中检索数据

       kesho.pull(KEY_OBJECT, default_value, SampleModel::class)
    

    【讨论】:

      猜你喜欢
      • 2018-10-11
      • 2015-05-21
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多