我正在尝试通过将每个整数保存在内部存储中的文件的新行中来保存应用程序中的整数列表。 对于retreiving它我逐行读取它并将每个linevalue(解析为整数)放在我的整数列表中。 我知道数据库对于这种东西更好,但这应该有用。
我现在尝试了很长一段时间,但它似乎永远不会奏效。我总是在尝试阅读时得到nullpointerexception。我记录了“line”,它给出了它应该具有的值。但
保存一个id,将其添加为新字符串:
private void saveToFavorites(Integer saveFav) {
String favstr = String.valueOf(saveFav);
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new OutputStreamWriter(openFileOutput("favorites", MODE_WORLD_WRITEABLE)));
writer.newLine();
writer.append((favstr));
System.out.println(" added to favs :"+ saveFav);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
阅读方法:
@SuppressWarnings("null")
private List<Integer> readFileFromInternalStorage() {
List<Integer> favs = null;
BufferedReader input = null;
try {
input = new BufferedReader(new InputStreamReader(openFileInput("favorites")));
String line;
while ((line = input.readLine()) != null) {
System.out.println("readFileFromInternalStorage line value: "+ line );
favs.add(Integer.parseInt(line));
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("readFileFromInternalStorage: fail" );
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return favs;
}
这是另一项活动。我认为它会起作用,但显然没有。回读时,logline:System.out.println(“readFileFromInternalStorage line value:”+ line); 显示行的值等于最后添加的id和空行,而不是其他行。因此逐行保存失败。此外,当将其解析为整数时,它会失败,这很奇怪,因为它只是一个数字。
08-01 12:29:54.190: I/System.out(1540): readFileFromInternalStorage line value:
08-01 12:29:54.190: I/System.out(1540): readFileFromInternalStorage line value: 301
任何人都知道我需要改变什么?
答案 0 :(得分:3)
由于Integer
为Serializable
,我建议序列化整个List
:
private void saveList(List<Integer> list) {
try {
File file = Environment.getExternalStorageDirectory();
File filename = new File(file, "yourfilename");
fos = new FileOutputStream(filename);
out = new ObjectOutputStream(fos);
out.writeObject(list);
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
private void readList()
{
try {
File file = Environment.getExternalStorageDirectory();
File filename = new File(file, "yourfilename");
fis = new FileInputStream(filename);
in = new ObjectInputStream(fis);
List<Integer> list= (List<Integer>) in.readObject();
in.close();
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
}
答案 1 :(得分:1)
试试今年5月它会帮助你: - 1 - String saveFav =包含所有这个形式的整数I1 +“/”I2 +“/”I3;
2: - 然后将其保存到文件
private void saveToFavorites(String saveFav) {
//right here your code for write into file saveFave string
}
在读取文件时读取字符串并拆分(“/”)。它对我有效。
答案 2 :(得分:0)
这是一些可以读取和写入手机内存的工作代码。 你可以创建一个数组或一个int列表,基本上只是迭代它直到所有的int都保存/读入内存:
这是将int写入内存的代码:
public void writePrimitiveInternalMemory(String filename, int value) {
SharedPreferences preferences = this.getPreferences(Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt(filename, value);
editor.commit();
}
这是从内存中读取的代码:
public int readPrimitiveInternalMemoryInteger(String filename) {
SharedPreferences preferences = this.getPreferences(Activity.MODE_PRIVATE);
return preferences.getInt(filename, 0);
}
我希望这可以帮到你!
答案 3 :(得分:0)
您没有分配整数列表...
List<Integer> favs = null;
分配一个新的arraylist ..
List<Integer> favs = new ArrayList<Integer>();