Android - 在没有数据库的情况下存储数据

时间:2014-03-18 14:37:30

标签: android

我的应用程序使用地理围栏边界记录用户移动,如果用户退出地理围栏,则会适当地升级警报。这些警报会计算并显示在活动结束时的摘要中。但是,我想创建一个统计页面,其中显示活动的上周或月份以及警报的数量,以便我可以在图表中显示这些。反正有没有使用数据库有效地做到这一点?

我曾想过将数据写入日志文件并阅读它,但对是否有更好的选择感到好奇。

3 个答案:

答案 0 :(得分:1)

如果您不想使用数据库,可以使用java序列化。 您还可以使用XML / JSON来存储数据。

答案 1 :(得分:1)

您可以使用SharedPreferences但它需要很多控件,可能比创建数据库更多。如果您坚持不使用数据库,请将一个整数放入共享首选项中,以保存数据计数,该整数也将成为您的ID。然后,您可以根据数据以循环方式存储数据。

这是将您的数据写入共享首选项

SharedPreferences mSharedPrefs = getSharedPreferences("MyStoredData",
                MODE_PRIVATE);
        private SharedPreferences.Editor mPrefsEditor = mSharedPrefs.edit();

        int count = mSharedPrefs.getInt("storedDataCount", 0);

        for(int i = 0 ; i < yourCurrentDataCount ; i++) {
            mPrefsEditor.putInt("data" + count, yourData.get(i));
            count++;
        }
        mPrefsEditor.putInt("storedDataCount", count);

要获取您的数据,

int count = mSharedPrefs.getInt("storedDataCount", 0);
for(int i = 0 ; i < count ; i++) {
            yourData.add(mSharedPrefs.getString("data" + i, "defaultData"));
            count++;
        }

编辑: 我应该补充一些解释。我们的想法是保存您的数据计数以生成ID,并根据它保存标记。这段代码会像这样工作,假设你有5个字符串。由于您没有MyStoredData xml,因此将创建它。然后,由于您没有“storedDataCount”标记,因此您将获得0作为计数。您的循环将迭代5次,并且在每次迭代中,您将向您的xml添加标签,例如“&lt; .data0&gt;您的第一个数据&lt; ./ data0&gt;&lt; .data1&gt;您的第二个数据&lt; ./ data1&gt; ..完成循环后,您将修改storedDataCount,它将变为&lt; .storedDataCount&gt; 5&lt; ./ storedDataCount&gt;。下次使用您的应用时,您的计数将从5开始,因此您的标记将从&lt; ; .data5&gt;。对于阅读,您将通过检查“data0”,“data1”等来迭代标记。

答案 2 :(得分:0)

我支持已经提到过使用数据库执行此任务的偏袒。不过,如果我是通过FS做的,我会使用像Square tape那样的事务异步库。

在您的情况下,我会在JSON对象(结构)中的会话期间保留数据并将其保留(在onPause()中)并使用tape将其恢复(在onRestore()中) GSON对象转换器。

我相信应该是开箱即用的。

磁带网站:http://square.github.io/tape/

或者手动保存文件或使用第三方库(如磁带),您可以随时(de)将JSON序列化为SharedPreferences