【问题标题】:Android - How to save an array of int/bool, check if it exists, and load it back after restarting appAndroid - 如何保存 int/bool 数组,检查它是否存在,并在重新启动应用程序后将其加载回来
【发布时间】:2015-05-31 05:18:17
【问题描述】:

之前我问过一些问题,关于我应该使用什么方法来保存我的应用程序中的一些数据,以便在应用程序关闭/停止后检索。我想,我得到了我一直在寻找的答案。但从那时起,我实现这样一个功能的努力就落空了。我研究了我遇到的各种问题,我认为我找到了答案。但似乎答案虽然可能是正确的,但不一定彼此匹配。我的意思是,它们可能单独工作,但来自不同的来源,它们不能作为一个整体一起工作,对我来说,它们根本不起作用。我被引导相信我想使用 SharedPreferences。可能是这样,也可能不是,但这一直是我最近努力的方向。

所以我会问这个多部分的问题。

  1. 如何保存整数(或布尔值)数组?
  2. 在加载已保存的数组之前,如何检查它是否存在?
  3. 如何加载数组以再次使用其值?

这些是我现在问题的基础。即使在这一点上,尽管我可能很沮丧,但如果有人能指出我正确的方向,我不介意做更多的研究,但我所看到的所有地方似乎都缺少信息,我无法真正理解/看看如何编写我想做的代码。

如果你真的想看一些代码,我现在可以给你看我所有的碎片(我没有删除的部分),但我认为这对你没有任何好处。也就是说,我会回答您可能需要帮助我的任何问题。

提前致谢。

编辑:该数组在应用版本之间几乎不会发生变化。它应该是大约 500-2000 个整数或布尔值(或者/或对我来说都一样)。该数组基本上是一组标志,告诉应用程序根据值做一件事或另一件事。只有当我在版本之间添加或删除项目时,大小才会改变。因此,在检查文件/数组是否存在后,我会将保存的数组与应用程序中的数组进行比较并采取相应措施。

【问题讨论】:

  • 储蓄是为了什么目的?你想什么时候重新加载它们?如果有的话,您想在什么时候重置为默认值?我们说的是 10 个数组还是 1000 万个数组?尺寸是静态的还是可以改变的?你的问题太笼统,无法回答。根据您的需要,SharedPreferences 可能是一个好方法,也可能不是。它不能很好地处理数组。
  • 您好,感谢您的回复和问题,希望我会更新您的所有答案。

标签: android save load sharedpreferences file-exists


【解决方案1】:

我遇到过类似问题,需要通过重新启动来保留数据。我找到了两种方法。

1) 很少访问数据。 以某种可以轻松保存/检索的格式将数据存储在.../文件中。我使用 JSONArrays 来保存数据。 mContext.getFilesDir() 将为您获取路径,您可以简单地查看您的 file.exists() 以确定数据是否存在。 您将需要创建一个对象,该对象将: 1)将您的数据转换为存储格式

for(int i = 0; i < mArray.size(); i++ )
{
    JSONObject jo = new JSONObject();
    jo.put("THINGY", mArray[i]);

    ja.put(jo);
}

2) 从商店中检索您的数据

String js = readFromFile(fileName);
if( !js.isEmpty() )
        ja = new JSONArray( js );
for( int i = 0; i < ja.length(); i++
{
//  CONVERT THIS ARRAY TO YOUR INT...
}

3) 像这样读/写文件:

private void writeToFile(String fileName, String data) 
{
    try
    {

        FileOutputStream fOut = openFileOutput( fileName, MODE_PRIVATE );
        OutputStreamWriter osw = new OutputStreamWriter(fOut);

        //  Log.d(TAG, "Writing output log...");
        osw.write(data);
        osw.flush();

        osw.close();
    }
    catch( Exception e )
    {
        Log.e(TAG, "Cannot create " + fileName );
    }
}


private String readFromFile(String fileName)
{

    String ret = "";

    try 
    {
        InputStream inputStream = openFileInput(fileName);

        if ( inputStream != null ) 
        {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String receiveString = "";
            StringBuilder stringBuilder = new StringBuilder();

            while ( (receiveString = bufferedReader.readLine()) != null ) 
            {
                stringBuilder.append(receiveString);
            }

            inputStream.close();
            ret = stringBuilder.toString();
        }
    }
    catch (FileNotFoundException e) 
    {
        Log.e(TAG, "File not found: " + e.toString());
    } 
    catch (IOException e) 
    {
        Log.e(TAG, "Can not read file: " + e.toString());
    }

    return ret;
}

JSON 在这种情况下效果很好,因为有一些简单的方法可以转换成字符串。

2) 频繁访问 我使用了 SQLiteDatabase。我使用 Singlton 和 DBHelper.getInstance() 来访问它。这似乎有点矫枉过正,但如果您保存的数据量超出了简单的整数数组,这是一个很好的解决方案。

一个非常基本(但合理)的起点是:http://www.vogella.com/tutorials/AndroidSQLite/article.html。请注意,他的页面是为 4.3 编写的。

HTH。

【讨论】:

  • 我已经浏览过这个,我一定会认真研究它。我只见过 JSON 这个术语,我一直认为它只是另一种编程语言。我真的希望尽可能简单(使用我能真正理解和欣赏的方法)。也就是说,非常感谢您的回复。就像我说的,我一定会调查的。
猜你喜欢
  • 2013-07-13
  • 2021-11-02
  • 1970-01-01
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 1970-01-01
  • 2015-07-19
相关资源
最近更新 更多