Чтение и запись SD-карты. - PullRequest
       16

Чтение и запись SD-карты.

0 голосов
/ 23 января 2012

Я гуглял, я смотрел на 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();
     }

 }

Извините, но почему-то код получается не очень красиво. Итак, подытожил вопросы:

  • Какой метод мне следует использовать, если я хочу записать и прочитать игровые данные и почему? (ИП вроде здесь или SQLlite?)
  • Я получаю myDir, это лучшее место для хранения таких данных, где еще и почему?
  • Есть ли способ работы с ArrayList? У кого-нибудь есть простой пример для этого?

Большое спасибо!

1 Ответ

2 голосов
/ 23 января 2012

У вас есть несколько вариантов :

  • Общие предпочтения: хранить личные примитивные данные в парах ключ-значение. Можно хранить небольшое количество простых данных. Это может соответствовать вашим потребностям в зависимости от размера данных, которые вам нужно хранить.
  • Внутреннее хранилище : сохранение личных данных в памяти устройства. Я думаю, что это лучший выбор, потому что данные являются частными и не могут быть доступны для других приложений.
  • Внешнее хранилище : сохранение данных PUBLIC на общем внешнем хранилище. Это то, что вы пытаетесь сделать. Это будет работать, но я думаю, что это не очень хорошая идея, потому что пользователь может изменить файл и взломать игру.
  • Базы данных SQLite : хранить структурированные данные в частной базе данных. Вероятно, это избыточное решение в вашем случае, когда данные просты и реляционное хранилище на самом деле не нужно.
  • Сетевое подключение

В любом случае, попробуйте использовать формат файла, который упрощает дальнейшую обработку, например, вы можете использовать файл Properties (легко писать / анализировать в Java) и сохранять каждую контрольную точку уровня как свойство или что-то в этом роде (то есть level_1_checkpoint = 200).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...