android - 保存历史记录和自动完成值的位置

时间:2011-09-12 16:32:11

标签: android storage sharedpreferences

我的历史对象只有2个字段(id + name)。我必须保存它们。我使用共享偏好,因为这非常适合保存键值对。问题是......没有可能改变保存文件的位置。我不想将它们保存到sharedpref文件夹中,因为我想让应用程序的用户删除所有历史记录条目。我必须检查哪些文件是历史文件,哪些文件是应用程序使用的首选项文件。这不是问题..但是脏的imo。另一方面..我的历史文件不应该在sharedpref文件夹中..他们在该文件夹中无关..

另一种可能性是将数据存储在内部存储中,例如xml。我必须写一个序列化器和解析器。

第三种可能性(我记得写这个问题)是通过Java Properties保存它。这可能是最简单的解决方案。它像sharedpref

最后一种可能性是将其存储在sqlite中。我不知道..我的数据太小了......我用数据库存储它?

我的问题很简单......你建议使用什么以及为什么。你用什么?同一个问题属于自动填充值。 id喜欢保存用户在文本字段中输入的值。在哪里保存?你在哪里保存这些数据?

事先提前

2 个答案:

答案 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用作此类中的局部变量,如果在整个应用程序中的代码中需要它们,则可以使用它们。