Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android-在何处保存历史记录和自动完成值_Android_Storage_Sharedpreferences - Fatal编程技术网

android-在何处保存历史记录和自动完成值

android-在何处保存历史记录和自动完成值,android,storage,sharedpreferences,Android,Storage,Sharedpreferences,“我的历史记录”对象只有2个字段(id+名称)。我必须拯救他们。我使用SharedReferences是因为它非常适合保存键值对。问题是..不可能更改到保存文件的位置。我不想将它们保存到sharedpref文件夹中,因为我想让应用程序的用户能够删除所有历史记录条目。我必须检查哪些文件是历史文件,哪些文件是应用程序使用的首选项文件。这是没有问题的..但另一方面..我的历史文件不应该在sharedpref文件夹中..它们在该文件夹中没有任何事情 另一种可能性是将数据以xml的形式存储在内部存储器中。

“我的历史记录”对象只有2个字段(id+名称)。我必须拯救他们。我使用SharedReferences是因为它非常适合保存键值对。问题是..不可能更改到保存文件的位置。我不想将它们保存到sharedpref文件夹中,因为我想让应用程序的用户能够删除所有历史记录条目。我必须检查哪些文件是历史文件,哪些文件是应用程序使用的首选项文件。这是没有问题的..但另一方面..我的历史文件不应该在sharedpref文件夹中..它们在该文件夹中没有任何事情

另一种可能性是将数据以xml的形式存储在内部存储器中。我必须编写一个序列化程序和解析器

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

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

我的问题很简单,你建议用什么,为什么。你用什么?同样的问题属于自动完成值。我想保存用户在文本字段中输入的值。去哪里拯救他们?在哪里保存这些数据


thx预先

您可以使用(比如)Context.getSharedReferences(“history”)为您的历史创建一个单独的SharedReferences文件,该文件将创建一个SharedReferences文件,如下所示

/data/data/com.your.package.name/shared_prefs/history.xml

但是我很确定所有的SharedReferences文件都将在
/data/data/com.your.package.name/shared\u prefs/
中创建。我不认为您可以更改位置。

我可能误解了您的目标,但对于类似的事情,我会直接使用
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和string

要读取这些数据,非常简单:

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

但我并不是只有一个历史文件。我有几个。可能1..可能20..取决于用户。每次用户查看某个产品时,应添加一个历史文件条目。是的..无法更改SharedRef位置!因此,只要在用户查看相关产品时为每个文件创建一系列具有合适名称的历史文件即可。