2016-05-15 4 views
3

Поначалу я сожалею о своем бедном английском. Я разрабатываю приложение в java для android, используя libgdx. Я хочу записать в файл, чтобы сохранить некоторые объекты приложений, и я использую ObjectOutputStream для этого. Вот отрывок кода:Android Libgdx - не удалось сохранить в файле

  try { 
       os_savedGame = new ObjectOutputStream(new FileOutputStream("savedGame.txt")); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

      try { 
       os_savedGame.writeObject(obj1); 
       os_savedGame.writeObject(obj2); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

Я запустил его в качестве приложения рабочего стола и до сих пор так хорошо, но когда я попытался запустить как Android App я получил следующее сообщение об ошибке: попытка вызвать виртуальный метод 'void java.io.ObjectOutputStream.writeObject (java.lang.Object)' на ссылке нулевого объекта

Я знаю, что на версии рабочего стола файл хранится в папке android \ assets, но я искал эквивалентную папку на моем мобильном телефоне, и я не смог ее найти. Я искал data/name_of_my_project во внутренней и внешней памяти, и я не смог его найти. Как и ранее, у меня была аналогичная ошибка, когда я не смог загрузить скин в версии для Android (говоря, что скин не существует), хотя я мог в настольной версии, я думаю, что моя проблема может быть связана с тем, что файлы хранятся в версии для Android. Может ли кто-нибудь дать мне совет по этому поводу?

Спасибо!

ответ

2

Я рекомендую вам прочитать официальную документацию: https://github.com/libgdx/libgdx/wiki/File-handling

Internal files are relative to the application’s root or working directory on desktops, relative to the assets directory on Android, and relative to the core/assets/ directory of your GWT project. These files are read-only.

Он упоминает, что файлы, сохраненные в папке assets доступны только для чтения. Для сохранения состояния игры я бы рекомендовал использовать API Preferences, который позволяет вам хранить пары ключ-значение и легко извлекать их. Больше информации здесь: https://github.com/libgdx/libgdx/wiki/Preferences.

Для конвертирования объектов в строки здесь еще один ответ: How to serialize an object into a string

Если вы все еще хотите, чтобы записать в файл, который вы должны будете использовать локальное хранилище, которое объясняется далее в вики (см самой верхнюю ссылки).

+0

Спасибо за ответ ... Я попытался выполнить первую ссылку неуспешно. Я уже читал кое-что о Предпочтениях, но для этой игры необходимо написать и прочитать файлы (учитель спросил об этом). В любом случае, как я уже говорил, у меня была аналогичная проблема при загрузке скина. Я получил следующую ошибку: – PR16

+0

05-16 14: 49: 49.235: E/AndroidRuntime (10163): com.badlogic.gdx.utils.GdxRuntimeException: Asset не загружен: uiskin.json \t at com.badlogic.gdx.assets .AssetManager.get (AssetManager.java:144) на экранах. TestScreen. (TestScreen.java:29) на com.mygdx.game.MyGdxGame.create (MyGdxGame.java:27) на com.badlogic.gdx.backends.android.AndroidGraphics.onSurfaceChanged (AndroidGraphics.java:290) на android.opengl.GLSurfaceView $ GLThread.guardedRun (GLSurfaceView.java:1505) на android.opengl.GLSurfaceView $ GLThread.run (GLSurfaceView.java:1240) – PR16

+0

Ваша ошибка в том, что вам нужно загрузить из диспетчера активов, прежде чем вы сможете извлеките файл, пожалуйста, прочитайте документацию (или задайте любые вопросы, если вы все еще смущены - я тоже студент в 15 :) :) –

Смежные вопросы