【问题标题】:How can i improve my StringArray storing and loading?如何改进我的 StringArray 存储和加载?
【发布时间】:2018-12-07 03:26:16
【问题描述】:

实际上,在我的应用程序中,我正在通过下载格式化它的 HTML 页面代码并从页面中检索一些特定数据来执行一些复杂的操作,之后我将所有不同的数据存储在字符串数组中。

将数据存储在数组中后,我将使用 Json 将其保存在 sharedPreferences 中,但我不确定这是否是最佳选择,是否有任何其他操作可以代替以使其保存和加载数据更快?

PS:我不会使用任何数据库作为 Room 或 SQlite。

这是我保存和加载数据的代码:

private void saveDataTasti(){

    SharedPreferences sharedPreferences = getSharedPreferences("TASTI_SAVE", MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    Gson gson = new Gson();
    String json = gson.toJson(items);
    editor.putString("tasti list", json);
    editor.apply();

}


private void loadDataTasti() {
    new ArrayList<Item>();
    SharedPreferences sharedPreferences = getSharedPreferences("TASTI_SAVE", MODE_PRIVATE);
    Gson gson = new Gson();
    String json = sharedPreferences.getString("tasti list", null);
    Type type = new TypeToken<ArrayList<Item>>() {
    }.getType();
    items = gson.fromJson(json, type);
}

【问题讨论】:

  • 所以你的意思是你目前的解决方案很慢还是什么?如果你不想使用数据库,那么序列化并存储到SharedPreference 是你唯一的选择,但绝对不是最好的选择。总是推荐使用数据库来保存复杂的对象数组。

标签: android arrays json sharedpreferences


【解决方案1】:

Shared Preference 仅在内部将内容存储为文件。因此,与数据库相比,从中检索数据会很慢。此外,存储的数据是一个 json 字符串,因此它在性能方面增加了额外的复杂性。 Offcourse Using SQlite/Room 是理想的选择,如果您搜索它,您可以轻松获得样板。但是,由于您不想使用这些实用程序,如果您从服务器获取的数据不经常更改,那么您可以在其中实现视图级缓存。

View Caching

【讨论】:

  • 实际上,当我初始化应用程序时,我会获取一次数据,并且只有当有人更改服务器上每周一次的数据时,我才会去下载所有数据并重新下载的 Activity它
  • 然后你可以应用视图缓存。我可以知道你为什么不通过 sqlite 存储响应吗?
  • idk 我更喜欢使用 SharedPrefs 稍后在 RecyclerView 中加载存储的数据
  • 如果我改用sqlite,你认为它会改善很多吗?
  • 是的,共享首选项将数据存储在平面文件中。数据库旨在对数据进行快速 CRUD。此外,如果您使用 sqlite 或 room,您也可以只反序列化一次 json 字符串,并且可以将所有对象存储为行。每次从共享首选项中获取对象时,它将为您节省反序列化对象的成本,并且您还可以设置缓存以节省您的网络调用。它是一次性的努力,它会长期支付给您。 sqlite 教程:youtube.com/watch?v=cp2rL3sAFmI
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多