2016-04-22 63 views
0

在我的Android應用程序中,我使用Gson爲了在SharedPreferences中保存/加載對象的Arraylist。遵循我的代碼使用Gson。如何使用/不使用Gson將對象列表保存並加載到SharedPreferences?

public static ArrayList<RequestModal> getModalList(Context ctx) { 
    Gson gson = new Gson(); 
    String json = getSharedPreferences(ctx).getString("ModalList", new Gson().toJson(new ArrayList<>())); 
    Type type = new TypeToken<ArrayList<RequestModal>>() {}.getType(); 
    return gson.fromJson(json, type); 
} 

在這裏「RequestModal」是簡單的對象,包括一些字符串和整數。 它適用於「在線」的情況。但是,如果互聯網離線,永遠在下面的代碼工作。

Type type = new TypeToken<ArrayList<RequestModal>>() {}.getType(); 

我該如何解決?在使用/不使用Gson的情況下實現此功能的方式是什麼?請幫助我有一個好主意的人。 預先感謝您。

+0

它適用於「在線」的情況。但是,如果互聯網離線,永遠在下面的代碼工作。 --->我沒有把你帶到這裏。你的代碼如何依賴於互聯網? –

+0

是的,你說得對。我的代碼獨立於互聯網。但是,一旦網絡脫機,它將永遠在「TypeToken >(){} .getType();」上運行,不會停止或崩潰。 –

回答

0

您可以實現這一點沒有GSON:

public static EpisodeDetails parseEpisodeDetails(String content) { 
    EpisodeDetails episodeDetails = new EpisodeDetails(); 
    try { 
     JSONObject jsonObject = new JSONObject(content); 
     episodeDetails.title = jsonObject.getString("title"); 
     episodeDetails.subTitle = jsonObject.getString("subtitle"); 
     episodeDetails.synopsis = jsonObject.getString("synopsis"); 
     episodeDetails.ends_on = jsonObject.getString("ends_on"); 

     JSONArray images = jsonObject.getJSONArray("image_urls"); 
     if (images.length() > 0) { 
      episodeDetails.image_url = images.getString(0); 
     } 

    } catch (JSONException e) { 
     e.printStackTrace(); 
     return null; 
    } 
    return episodeDetails; 
} 

我在做什麼的只是把字符串,你的情況存到一個叫ModalList共享的首選項之一,並在我的結構插入值,上我的代碼結構被稱爲EpisodeDetails,在你的代碼上,代理是RequestModal。如果你不想通過代碼來完成,並想嘗試另一個庫,我建議傑克遜。

另一件事,在這條線:

String json = getSharedPreferences(ctx).getString("ModalList", new Gson().toJson(new ArrayList<>())); 

你的第二個參數是沒有必要的。 getString將加載爲第一個參數,並將默認值作爲第二個參數(在空結果的情況下)。您可以將其更改爲""null

0

好,您的問題的另一種解決方案可能是TinyDB。它利用Gson保存在sharedPrefs對象ArrayLists,其用途是作爲

Person person = new Person("john", 24); 
tinydb.putObject("user1", person); 

ArrayList<Person> usersWhoWon = new ArrayList<Person>(); 
tinydb.putListObject("allWinners", usersWhoWon); 

如此簡單,多數民衆贊成它,結帳我上面給出的鏈接,查看使用細節

希望這有助於

相關問題