2016-04-22 90 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); 

如此简单,多数民众赞成它,结帐我上面给出的链接,查看使用细节

希望这有助于

相关问题