Android 存储阵列列表<;对象>;作为JSON SharedReference或SQLite数据库表?

Android 存储阵列列表<;对象>;作为JSON SharedReference或SQLite数据库表?,android,json,sqlite,sharedpreferences,Android,Json,Sqlite,Sharedpreferences,情景: 我正在从服务中的线程向web服务发送用户位置(对象位置,包含:lat、long和accurity字段)。如果由于各种问题(如没有网络)而失败,我需要存储它并尝试下次发送。如果多次失败,将存储多个位置对象 我有两个选择: 使用SQLite数据库和每个线程上打开的SQLiteOpenHelper,从表中检索记录,关闭。成功发送后,清除表内容 当location对象存储为ArrayList(如果有很多)并使用GSON解析为JSON时,请使用SharedReferences。需要时再次解析到Ar

情景: 我正在从服务中的线程向web服务发送用户位置(对象位置,包含:lat、long和accurity字段)。如果由于各种问题(如没有网络)而失败,我需要存储它并尝试下次发送。如果多次失败,将存储多个位置对象

我有两个选择:

  • 使用SQLite数据库和每个线程上打开的SQLiteOpenHelper,从表中检索记录,关闭。成功发送后,清除表内容

  • 当location对象存储为ArrayList(如果有很多)并使用GSON解析为JSON时,请使用SharedReferences。需要时再次解析到ArrayList


  • 我知道SharedReferences没有大小限制,根据我的条件,我可能有100行(这是夸张的,但可能)。我主要担心的是SQlite经常打开和关闭,事情可能会变得一团糟,最终强制关闭。SharedReferences不会影响任何事情,但我认为在保存/解析如此长的列表时可能会表现不佳。我知道SharedReference并不是针对这个,但我想听听你的意见

    如果您担心sqlite为打开和关闭数据库引发异常,可以将值分别放入SharedReference中,然后使用

    Map<String,?> keys = prefs.getAll();
    for(Map.Entry<String,?> entry : keys.entrySet()){
         Log.d("map values",entry.getKey() + ": 
                                      "+ entry.getValue().toString());            
     }
    
    Map keys=prefs.getAll();
    for(Map.Entry:keys.entrySet()){
    Log.d(“映射值”,entry.getKey()+”:
    “+entry.getValue().toString());
    }
    
    如果您担心sqlite为打开和关闭数据库引发异常,您可以将值分别放入SharedReference中,然后使用

    Map<String,?> keys = prefs.getAll();
    for(Map.Entry<String,?> entry : keys.entrySet()){
         Log.d("map values",entry.getKey() + ": 
                                      "+ entry.getValue().toString());            
     }
    
    Map keys=prefs.getAll();
    for(Map.Entry:keys.entrySet()){
    Log.d(“映射值”,entry.getKey()+”:
    “+entry.getValue().toString());
    }
    
    这是一个有趣的方法。这是一个有趣的方法。