2011-11-05 62 views
1

我有世界上最糟糕的时间试图了解如何保存任何perminately。我想要做的就是保存一个整数列表,我可以保留一些高分。我似乎无法找到这样做。我尝试序列化数据并使用文件输入流进行保存,但是无法加载它并解密数据,因为从文件输入流读取数据的唯一方法是将其作为int读取。我试图单独编写并读取arraylist中的每个数字,但后来我得到空指针错误。有没有人有这样做的好方法/有一个很好的例子来说明如何做到这一点?提前致谢。在Android中保存Arraylist

-Derek

+0

的可能重复[我怎样才能在序列化实习生文件中的ArrayList和保存](http://stackoverflow.com/questions/5513370/how-can-i-serializable-a-arraylist-and-save -in-intern-file)和http://stackoverflow.com/questions/5498039/how-can-i-save-an-arraylist-permanently-without-database和http://stackoverflow.com/questions/5513370/我怎么可以序列化一阵列列表和保存在实习文件和更多通过搜索找到。 – CommonsWare

回答

1

也许最简单的方法是序列化/从,你可以在一个SharedPreference存储字符串反序列化对象。下面的代码应该为你做:

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; 
    } 
+0

或者,您可以直接使用'putStringSet(String key,Set values)'和'getStringSet(String key,Set defValues)',尽管您仍然会将int转换为字符串。 –

+1

也就是说,API 11(Android v3.0.x)以上只有 – Damian

0

我会做一个名为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){} 
} 
+0

这将工作在较旧的API?说2.2 – Derek

+0

我有这个通用代码运行在2.1及以上的生产。 – Vinnie