【问题标题】:Saved Location on Preferance is allways null首选项上的保存位置始终为空
【发布时间】:2020-04-25 19:43:30
【问题描述】:

我尝试在我的偏好中保存一个位置。 SavedLocation 类存储三个变量:名称、位置和位置类型。在我尝试从 Preference 中读取保存的日期之前,一切看起来都很棒。名称和位置类型已完美存储,但存储的位置为空。在调试中保存位置包含所有想要的变量,但看起来像 ed.putString(SAVED_LOCATIONS, gson.toJson(savedLocations, savedLocationsType)); 不要写正确我的日期。

private void saveLocation(SavedLocation savedlocation, Context context) {
    Gson gson = new Gson();
    Type savedLocationsType = new TypeToken<ArrayList<SavedLocation>>() {}.getType();
    ArrayList<SavedLocation> savedLocations = getSavedLocations(context);
    savedLocations.add(savedlocation);
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor ed = prefs.edit();
    ed.putString(SAVED_LOCATIONS, gson.toJson(savedLocations, savedLocationsType));
    ed.apply();
}

SavedLocation 类是一样的:

 public SavedLocation(String name, Location location, LocationType type) {
    this.name = name;
    this.location = location;
    this.type = type;
}

有什么建议吗?

【问题讨论】:

  • 先尝试调试你的代码。看看savedLocations是否有位置,#gson.toJson()返回什么。
  • 保存的位置包含所有必需的日期。 gson.Json() 返回 [{"location":{"mElapsedRealtimeNanos":0},"name":"test 1","type":"HOTEL"},{"location":{"mElapsedRealtimeNanos":0} ,"name":"test 2","type":"HOTEL"}]
  • 当尝试阅读时,我得到了正确的名称和类型值。对于位置获取下一个结果: Location[null 0,000000,0,000000 hAcc=??? t=?!?等=?!? vAcc=??? sAcc=??? bAcc=???]。在 savedLocation 变量上(在保存方法之前)我有正确的地址(读取时为空)和 GPS 坐标(读取时有 0,000000,0,000000)。
  • 我猜你遇到了 Gson 问题,因为你说 toJson() 返回值包括 "location":{"mElapsedRealtimeNanos":0}。因此,Gson 似乎不知道如何处理您的 SavedLocation 对象中的 Location 对象。我不知道让 Gson 工作的方法是什么,但另一种选择是将 Location 的纬度和经度保存为 SavedLocation 类中的浮点/双精度字段。熟悉 Gson 的人可能会提供正确的答案。 :)

标签: android gson sharedpreferences


【解决方案1】:

试试这个

SharedPreferencesEditor 创建变量。

  SharedPreferences pref;
  Editor editor;
  String PREF_NAME="my_location"

现在获得偏好

    pref = this.getSharedPreferences(PREF_NAME, 0);
    editor = pref.edit();

现在将位置添加到preference

  editor.putString(SAVED_LOCATIONS, gson.toJson(savedLocations, savedLocationsType));
    editor.commit();

然后获取数据

  String location=pref.getString(savedLocations, "defaultvalue");

【讨论】:

  • 我使用 savedLocations 作为一个具有三个不同变量的类:名称、位置和位置类型。并且需要存储多个位置。
  • 然后使用room databasesqllite database
猜你喜欢
  • 1970-01-01
  • 2019-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
相关资源
最近更新 更多