用Gson写不能读List

时间:2017-03-09 11:00:01

标签: android gson

我想使用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(在最后一个代码部分中注释)。

如何解决?

2 个答案:

答案 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);