【发布时间】: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