2011-09-12 72 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的在這個類的局部變量,如果你需要他們在你的代碼在整個應用程序,你會使用。

相關問題