我的历史对象只有2个字段(id + name)。我必须保存它们。我使用共享偏好,因为这非常适合保存键值对。问题是......没有可能改变保存文件的位置。我不想将它们保存到sharedpref文件夹中,因为我想让应用程序的用户删除所有历史记录条目。我必须检查哪些文件是历史文件,哪些文件是应用程序使用的首选项文件。这不是问题..但是脏的imo。另一方面..我的历史文件不应该在sharedpref文件夹中..他们在该文件夹中无关..
另一种可能性是将数据存储在内部存储中,例如xml。我必须写一个序列化器和解析器。
第三种可能性(我记得写这个问题)是通过Java Properties保存它。这可能是最简单的解决方案。它像sharedpref
最后一种可能性是将其存储在sqlite中。我不知道..我的数据太小了......我用数据库存储它?
我的问题很简单......你建议使用什么以及为什么。你用什么?同一个问题属于自动填充值。 id喜欢保存用户在文本字段中输入的值。在哪里保存?你在哪里保存这些数据?
事先提前答案 0 :(得分:0)
您可以使用(例如)Context.getSharedPreferences("history")
为历史记录创建单独的sharedpreferences文件,该文件将创建如下的共享偏好文件。
/data/data/com.your.package.name/shared_prefs/history.xml
但我非常确定所有共享偏好文件都将在/data/data/com.your.package.name/shared_prefs/
中创建。我认为你不能改变位置。
答案 1 :(得分:0)
我可能会误解你的目标,但对于类似的事情,我会直接使用java.io.BufferedWriter
的BufferedWriter为每个对象写一个新文件。同样,您可以使用BufferedReader读取数据。代码看起来像这样:
public static void save(FileIO files){
BufferedWriter out = null;
try{
//use a writer to make a file named after the object
out = new BufferedWriter(new OutputStreamWriter(
files.writeFile(objectSomething)));
//the first line would be ID
out.write(Integer.toString(objectID));
//second line would be the name
out.write(objectName)
//Theres two possible IOexceptions,
//one for using the writer
//and one for closing the writer
} catch (IOException e) {
} finally {try {
if (out != null)
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
在这个例子中,我使用了" objectSomething"作为文件的字符串名称,objectID和objectName分别是文件包含的int和字符串。
阅读这些数据非常简单:
public static void load(FileIO files) {
BufferedReader in = null;
try {
// Reads file called ObjectSomething
in = new BufferedReader(new InputStreamReader(
files.readFile(ObjectSomething)));
// Loads values from the file one line at a time
varID = Integer.parseInt(in.readLine());
varName = in.readLine();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (in != null)
in.close();
} catch (IOException e) {
}
}
}
在这里,我已经将varID和varName用作此类中的局部变量,如果在整个应用程序中的代码中需要它们,则可以使用它们。