读写SD卡列表

时间:2012-01-22 21:45:27

标签: android sqlite storage

我一直在谷歌搜索,我看了StackOverflow并看到了很多例子,但我真的无法掌握它。我是android的新手,学习如何读/写。

也许你们其中一个人可以帮我一些简单的代码。我想要的是保存分数,剩余时间并将检查点传递到文件中,因为您可以在几天后再次停止和播放。

所以在我的想象中,理想的是(因为它只是简单的数据)不能使用SQL lite,而只是使用文本文件。我无法找到如何使用列表,读取,写入的检验代码。

如果您从文件中读取整个列表(字符串)会很好,此列表的长度可能会发生变化。然后你可以更新列表,让我们说list [5] = 200(500),然后把它写回文件。您还可以将数据添加到文件(传递的检查点)。

作为一个开始,我想出了这个,但我坚持使用检查点,我不确定是否写入文件整个文件将被重写或我正在添加数据:

  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?有人有一个简单的例子吗?

非常感谢!

1 个答案:

答案 0 :(得分:2)

您有several options

  • 共享偏好设置:将私有原始数据存储在键值对中。可以存储少量简单数据。它可以根据您需要存储的数据大小来满足您的需求。
  • 内部存储:将私有数据存储在设备内存中。我认为这是最好的选择,因为数据是私有的,其他应用程序无法访问。
  • 外部存储:将PUBLIC数据存储在共享外部存储上。这就是你要做的。它会起作用,但我认为这不是一个好主意,因为用户可以更改文件并破解游戏。
  • SQLite数据库:将结构化数据存储在私有数据库中。在您的情况下可能是一种过度杀伤,数据很简单,并且不需要关系存储。
  • 网络连接

在任何情况下,尝试使用简化进一步处理的文件格式,例如,您可以使用Properties文件(易于在Java中编写/解析),并将每个级别检查点存储为属性或其他内容像那样(即level_1_checkpoint = 200)。