繁体   English   中英

在Android中保存Arraylist

[英]Saving Arraylist in Android

我正处于世界上最糟糕的时期,试图了解如何彻底地保存任何东西。 我想要做的就是保存一个我能保持高分的Ar Ar Ar And And And And And And And And And And。 我尝试序列化数据并使用文件输入流来保存它,但是没有办法加载它并取消数据的去除,因为从文件输入流中读取数据的唯一方法是将其作为int读取。 我尝试单独编写和读取arraylist中的每个数字,但后来我得到空指针错误。 有没有人有这样做的好方法/有一个如何做到这一点的好例子? 提前致谢。

-Derek

我将使用SQL数据库,而不是为数据文件而苦苦挣扎。

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

可能最简单的方法是从可以存储在SharedPreference中的String序列化/反序列化对象。 下面的代码应该为您做到这一点:

public static void saveArray(Context ctx, int[] array) {
        String strArr = "";
        for (int i=0; i<array.length; i++) {
            strArr += array[i] + ",";
        }
        strArr = strArr.substring(0, strArr.length() -1); // get rid of last comma

        Editor e = PreferenceManager.getDefaultSharedPreferences(ctx).edit();
        e.putString("MY_ARRAY", strArr);
        e.commit();
    }

    public static int[] getArray(Context ctx) {
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx);
        String str = prefs.getString("MY_ARRAY", null);
        String[] strArr = str.split(",");
        int[] array = new int[strArr.length];
        for (int i=0; i<strArr.length; i++) {
            array[i] = new Integer(strArr[i]);
        }
        return array; 
    }

我会创建一个名为PersistentManager的类或者添加这两个方法的东西。 您必须将getApplicationContext()传递给这些方法。

public static ArrayList<Integer> getArrayList(Context context)
{
    String line;
    ArrayList<Integer> list = new ArrayList<Integer>();
    StringBuilder fullText = new StringBuilder();

    try {
        FileInputStream stream = context.openFileInput("myFileName");
        InputStreamReader inputStreamReader = new InputStreamReader(stream); 
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        while ((line = bufferedReader.readLine()) != null) 
        {
            fullText.append(line);
        }
        if (fullText.length() > 0) 
        {
            String[] myInts = fullText.toString().split(",");
            for (String intString : myInts)
            {
                list.add(Integer.getInteger(intString));
            }
        }
    } catch (Exception e) {}
    return list;
}

public static void setArrayList(ArrayList<Integer> myInts, Context context)
{
    FileOutputStream fos;
    try
    {
        fos = context.openFileOutput("myFileName", Context.MODE_PRIVATE);
        for (Integer integer : myInts)
        {
            fos.write((integer.toString() + ",").getBytes());
        }
        fos.close();
    } catch (FileNotFoundException e){} 
    catch (IOException e){}
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM