[英]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.