2011-09-12 73 views
1

我的历史对象只有2个字段(id + name)。我必须拯救他们。我使用了sharedpreferences,因为这对于保存键值对来说非常完美。问题是没有可能改变到保存文件的位置。我不想将它们保存到sharedpref文件夹中,因为我想让应用程序的用户有可能删除所有历史记录条目。我必须检查哪些文件是历史文件,哪些文件是应用程序使用的首选项文件。这是没有问题的..但脏兮兮的。另一方面..我的历史文件不应该在sharedpref文件夹..他们在该文件夹没有任何关系..android - 在哪里保存历史记录和自动完成值

另一种可能性是将数据存储在内部存储为xml为例。我将不得不编写一个序列化器和解析器。

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

最后的可能性是将其存储在sqlite中。我不知道..我的数据是如此之小......我使用数据库来存储它?

我的问题是简单的..你推荐使用什么和为什么。你用什么?同样的问题属于自动完成值。编号喜欢保存用户一旦输入到文本字段中的值。在哪里救他们?你在哪里保存这些数据?

THX提前

回答

0

您可以使用您的历史的一个分开sharedpreferences文件(比如说)Context.getSharedPreferences("history")这将如下创建sharedpreferences文件。

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

但我敢肯定,所有的共享首选项文件将被创建在/data/data/com.your.package.name/shared_prefs/。我不认为你可以改变位置。

+0

但我不只有一个历史文件。我有一些。也许1..maybe 20 ..取决于用户。每次用户查看某个产品时都应该添加一个历史文件条目。是的..共享首选位置不能改变! – imcurious

+0

因此,只需在用户查看相关产品时为每个文件创建一系列具有合适名称的历史文件。 – Torid

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和对象名分别为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的在这个类的局部变量,如果你需要他们在你的代码在整个应用程序,你会使用。

相关问题