【问题标题】:Save and retrieve Intent from SharedPreferences从 SharedPreferences 保存和检索 Intent
【发布时间】:2018-06-03 14:33:31
【问题描述】:

在我的应用程序中,我需要保存 Intend 数据以供以后使用(在应用程序重新启动时)。 我试过的是:

保存:Intent 解析为Uri 得到String >> 将String 放入SharedPreferences

检索:SharedPreferences获取String >>使用获取的String解析成Intent

这是我保存和检索 Intent 的代码

private void saveIntent(Intent data){
    editor = prefs.edit();
    String uri = data.toUri(0); //intent.toURI() deprecated
    editor.putString("INTENT_DATA", uri);
    editor.commit();
}

private void retrieveIntent(){
    String intentString = prefs.getString("INTENT_DATA", null);
    try {
           mIntent = Intent.parseUri(intentString, 0);
    } catch (URISyntaxException e) {
           e.printStackTrace();
    }
}

我已经尝试过这种方法,但它返回 Empty。我尝试调试代码,发现这是因为在saveIntent() 方法中,data.toUri(0) 将“空字符串”分配给String uri

请告诉我哪里做错了,如果有其他方法来存储绑定了所有数据的 Intent 对象,请务必提及。

我在互联网上搜索过,发现解析为 JSON 可能是一种方法,但大多数尝试过这种方法的人抱怨由于某些活动而丢失了与 Intent 对象捆绑的未知数据。

请提及是否真的可以保存 Intent 对象?如果有任何方法,请指导我采用这种方法。

【问题讨论】:

  • 你得到答案了吗?你能帮助我吗?非常感谢。
  • @hungcuiga1 这是一个老问题,不,在那段时间我没有找到任何办法,我最终使用了其他方法来处理我的案例
  • 您还记得使用哪种方法吗?谢谢。
  • 实际上,我并没有从共享偏好中保存/检索意图,而是保存了额外的数据
  • 您使用 Intent Extras 在活动之间传递数据。这就是您放置额外数据的方式:intent.putExtra(YOUR_KEY_HERE, YOUR_DATA_HERE)。这就是您检索它的方式:getIntent().getExtras().getString(YOUR_KEY_HERE)。然后将检索到的数据保存在SharedPreferences中。

标签: android json android-intent sharedpreferences uri


【解决方案1】:

如果您look at the implementation,您会看到您的Intent 必须设置标志URI_ANDROID_APP_SCHEMEURI_INTENT_SCHEME,或者填写data URI。

我个人从来没有做过这样的事情,但我想如果你有一个没有附加数据 URI 的明确意图,你需要一些标志来将它转换为某种字符串表示形式。

【讨论】:

  • 深入了解您正在尝试序列化的Intent - 它可能包含的信息太少而无法实际序列化。将您在其中的内容与实现所要求的内容进行比较,这些内容应最终出现在字符串中。
  • 当意图解析为带有标志Intent.URI_INTENT_SCHEME的uri时,它返回字符串“intent:”,这意味着它缺少所有意图额外内容
  • 一般来说,我建议使用隐式(即 URI 驱动)而不是显式(即活动类引用)意图。这将极大地帮助以后的模块化(因为您不再需要模块 B 中的模块 A 中的类引用,只是因为您想从某个 A 活动导航到 B),甚至应该可以帮助您解决当前的问题。
  • Wrt intent extras 无论如何你都很难完全序列化它们 - extras 基本上是一个Bundle 数据结构,可以接受任何简单类型 Parcelables和Serializables - 你认为这些数据应该如何编码在某个 URI 字符串中?那是错误的:)
  • 是的,我明白你的意思了..所以我应该尝试将 Intent 解析为 JSON 字符串吗?并稍后使用该字符串重新创建意图?您认为这种方法是否有效?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多