2012-01-22 147 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