2017-03-09 13 views
1

我想保存和閱讀List<MyObj>使用Gson sharedPreferences。無法讀取列表與Gson的寫作

這是我寫的方法:

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<>(); 
    } 
} 

但是當我嘗試讀取數據,我得到空(在最後部分代碼註釋)。

如何解決?

+0

是什麼GAS_STATIONS_LIST_KEY? – Pavya

+0

@Pravin更新問題 – Artem

+0

您沒有從共享的prefences獲取保存的json內容。你試圖反序列化的關鍵到列表,而不是與該鍵保存的JSON內容 – Devrim

回答

1

你就別再從共享使用偏好保存的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); 
+0

令人驚歎的答案和我的錯誤))謝謝你! – Artem

1

我覺得sharedPreferences只存儲原始數據類型

+1

是的,Gson給我字符串從列表和我保存這個字符串 – Artem

+0

是的,但他正在存儲字符串,這也是一種原始類型。 – Devrim