我想使用List<MyObj>
保存并阅读Gson
到sharedPreferences。
这是我的写法:
private static final String GAS_STATIONS_LIST_KEY = "gasStationsListKey";
@Override
public void save(@NonNull List<MyObj> gasStations) {
saveStr(GAS_STATIONS_LIST_KEY, gson.toJson(gasStations));
}
private void saveStr(@NonNull String key, @Nullable String value) {
sharedPreferences
.edit()
.putString(key, value)
.apply();
}
这是我的阅读方法:
@Override
public List<MyObj> getGasStationList() {
final Type type = new TypeToken<List<MyObj>>() {
}.getClass();
final List<MyObj> gasStations = gson.fromJson(GAS_STATIONS_LIST_KEY, type); // here null
if (gasStations != null && !gasStations.isEmpty()) {
return gasStations;
} else {
return new ArrayList<>();
}
}
但是当我尝试读取数据时,我得到null(在最后一个代码部分中注释)。
如何解决?
答案 0 :(得分:1)
SharedPreferences
仅存储原始数据类型。
答案 1 :(得分:1)
您没有从共享的prefences中获取已保存的json内容。您正在尝试将密钥反序列化为列表,而不是使用该密钥保存的json内容。
改变这个:
final List<MyObj> gasStations = gson.fromJson(GAS_STATIONS_LIST_KEY, type);
对此:
String savedJsonContent = sharedPreferences.getString(GAS_STATIONS_LIST_KEY, null);
final List<MyObj> gasStations = gson.fromJson(savedJsonContent , type);