2012-01-22 100 views
0

我一直在使用Google,我查看了StackOverflow並看到了很多示例,但我無法真正掌握它。我剛接觸android並學習如何讀/寫。閱讀寫SD卡列表

也許你們中的一個人可以用一些簡單的代碼來幫助我。我想要的是保存得分,剩下時間並將檢查點通過一個文件,因爲您可以在幾天後停止並再次播放。

因此,在我的想象中,理想將是(因爲它只是簡單的數據)不是使用SQL lite,而是使用文本文件。我無法找到如何使用列表,讀取,寫入的檢驗代碼。

如果從文件中讀取整個列表(字符串),這個列表可能會改變,這將是很好的。然後你可以更新列表,比方說列表[5] = 200(500),然後把它寫回文件。你也可能想把數據添加到文件中(通過的檢查點)。

作爲一個開始,我想出了這一點,但I'm堅持的檢查點,我不知道如果我寫整個文件將被改寫的文件或I'm添加數據:

private static String filename = "currentgamedata.txt"; 
    private String myDir = Environment.getExternalStorageDirectory() + "/MyDirectory/"; 
    String enter = System.getProperty("line.separator"); 


    public void WriteCurrentGameData(){ 

    try { 
     BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(openFileOutput(myDir+filename , MODE_WORLD_WRITEABLE))); 
     String MinutesLeft=Long.toString(GameTimeLeft); 
     String SaveScore=Integer.toString(score); 

     writer.write(MinutesLeft+enter); 
     writer.write(SaveScore+enter); 
     //HERE SHOULD COME SOME CODE FOR THE CHECKPOINTS 

     writer.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    }  
    } 

    public void ReadCurrentGameData(){ 

    try { 
     BufferedReader input = new BufferedReader(new InputStreamReader(
       openFileInput(myDir+filename))); 
     GameTimeLeft=Long.parseLong(input.readLine()); 
     score=Integer.parseInt(input.readLine()); 
     Log.d("Reader" , Long.toString(GameTimeLeft)); 
     Log.d("Reader" , Integer.toString(score)); 
     input.close(); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

對不起,somhow代碼不會非常漂亮。因此總結了以下問題:

  • 如果我想要遊戲數據寫入和讀取以及爲什麼要使用什麼樣的方法? (FE在這裏或SQLlite?)
  • 我正在獲取myDir,這是存儲此類數據的最佳位置,還有其他地方,爲什麼?
  • 有沒有辦法使用ArrayList?有沒有人有一個簡單的例子呢?

非常感謝!

回答

2

你有several options

  • 共享偏好:在鍵值對商店私人原始數據。可以存儲少量簡單的數據。它可以滿足您的需求,具體取決於您需要存儲的數據的大小。
  • 內部存儲:將私人數據存儲在設備內存上。我認爲這是最好的選擇,因爲數據是私人的,不能被其他應用程序訪問。
  • 外部存儲:將PUBLIC數據存儲在共享外部存儲上。這就是你想要做的。它會工作,但我認爲這不是一個好主意,因爲用戶可以更改文件並破解遊戲。
  • SQLite數據庫:將結構化數據存儲在專用數據庫中。在你的情況下,這可能是一種矯枉過正的情況,數據簡單並且不需要關係存儲。
  • 網絡連接

在任何情況下,儘量使用,簡化了進一步處理的文件格式,例如,你可以使用一個Properties文件(很容易寫/解析Java中),並存儲每個級別檢查點作爲一個屬性或類似的東西(即level_1_checkpoint = 200)。

+0

謝謝,是否有一個很好的方式來讀取一個數組,並保存後編輯,或者我可以直接訪問內部存儲某些行(希望你能得到我想說的)?有一些示例代碼可用嗎? (我認爲內部存儲的確是最好的,它的工作方式與外部工作方式差不多嗎?) – Diego