我创建了一个ListView,它可以动态添加数据,但每当我重新启动App时,先前存储的列表都会丢失。
如何保存该列表?
答案 0 :(得分:1)
您可以使用android SharedPreferences
将它们保存到本地客户端或者,您可以编写自己的模型。 你应该在这里传递你的对象;
public boolean writeYourObjectOnLocal(File dir, YourObject yourObject) {
ObjectOutput output = null;
OutputStream buffer = null;
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(dir.toString() + File.separator + "myFile.dat");
buffer = new BufferedOutputStream(fileOutputStream);
output = new ObjectOutputStream(buffer);
output.writeObject(yourObject);
return true;
} catch (Throwable e) {
return false;
} finally {
try {
output.close();
} catch (Throwable e) {}
try {
buffer.close();
} catch (Throwable e) {}
try {
fileOutputStream.close();
} catch (Throwable e) {}
}
}
你可以阅读你的对象;
public YourObject readYourObjectFromLocal(File dir) {
ObjectInput input = null;
BufferedInputStream buffer = null;
FileInputStream fileInputStream = null;
try {
String fileName = dir.toString() + File.separator + "myFile.dat";
fileInputStream = new FileInputStream(fileName);
buffer = new BufferedInputStream(fileInputStream);
input = new ObjectInputStream(buffer);
return (YourObject)input;
} catch (Throwable e) {
return null;
} finally {
try {
input.close();
} catch (Throwable e) {
}
try {
fileInputStream.close();
} catch (Throwable e) {
}
try {
buffer.close();
} catch (Throwable e) {
}
}
}
答案 1 :(得分:0)
我建议你使用像Reservoir这样的缓存库。检查如何在此链接上使用它的说明。 https://github.com/anupcowkur/Reservoir
确保在应用程序类中分配足够的内存(以字节为单位)。
示例:保存数据(异步):
// it can be any type of object (here is String)
List<String> strings = new ArrayList<String>();
strings.add("one");
strings.add("two");
strings.add("three");
Reservoir.putAsync("myListKey", strings, new ReservoirPutCallback() {
@Override
public void onSuccess() {
//success
}
@Override
public void onFailure(Exception e) {
//error
}
});
示例:读取已保存的数据(异步):
Reservoir.getAsync("myListKey", new TypeToken<List<String>>() {}.getType(),
new ReservoirGetCallback<List<String>>() {
@Override
public void onSuccess(List<String> strings) {
//success - set your list adapter and show those items
}
@Override
public void onFailure(Exception e) {
//error
}
});
答案 2 :(得分:0)
如果您需要保留大量数据,则应使用SQLite数据库,最好用于此目的。但是你也可以使用xml存储你的数据,xml比SQLite数据库慢。
您可以参考此标准Storage options。