2014-10-04 2 views
0

Я потратил дни, пытаясь выяснить причину этой аварии в коде сохраненной игры Google Play Службы с устройства тестера и не знаю, что еще попробовать, поскольку оно работает на всех трех моих устройствах. Грохот, что происходит это:Служебные программы Google Play Сохраненные снимки с моментальным снимком()

java.lang.NullPointerException: Must provide a previously opened Snapshot 

, когда я пытаюсь позвонить

snapshot.readFully(); 

даже если снимок был открыт и код возврата проверяется и проверяется, чтобы увидеть, если она равна нулю. Вот путь кода ведущий к аварии, с неисполненными секциями удалены для краткости:

public void LoadSnapshot() 
{ 
    AsyncTask<Void, Void, SNAPSHOT_ASYNC_RESULT> task = new AsyncTask<Void, Void, SNAPSHOT_ASYNC_RESULT>() 
    { 
     @Override 
     protected SNAPSHOT_ASYNC_RESULT doInBackground(Void... params) 
     { 
      if (isSignedIn()) 
      { 
       Snapshots.OpenSnapshotResult result = Games.Snapshots.open(getApiClient(), "MySnapshot", true).await(); 
       int status = result.getStatus().getStatusCode(); 
       DebugLog("Snapshot Load Open result code: " + status); 

       if (status == GamesStatusCodes.STATUS_SNAPSHOT_CONFLICT) 
       { 
        Snapshot snapshot   = result.getSnapshot(); 
        Snapshot conflictSnapshot = result.getConflictingSnapshot(); 

        //write both conflicted files so we can merge them 
        if (snapshot != null && conflictSnapshot != null) 
        { 
         byte[] ssdata = snapshot.readFully();  //CRASH HERE! 

         ... 

        } 

        ... 
       } 
      } 
     } 
    } 

    task.execute(); 
} 

Я получаю подобные сбои из того же самого устройства, когда просто спасительные иногда с .Open(), а затем .writebytes() ,

Это делает игру нестабильной, и мне нужно как-то это зафиксировать. Любая помощь или идеи будут высоко оценены.

Все, что я могу думать, потому что оно работает на фоне потока в AsyncTask, что-то плохое произошло между открытием моментального снимка и попыткой прочитать/записать его на этом устройстве. По словам тестера, это «большая часть» времени.

ответ

1

Я решил это в конечном итоге, разрешив только одну операцию Async за один раз, поскольку ранее я разрешал одновременное сохранение и загрузку того же моментального снимка.

Я также обернул readFully() внутри try/catch для обеспечения безопасности.

+0

Приятно слышать. Я тоже решил не так давно. Я сейчас сохраняю и загружаю! Теперь о внедрении лидеров и достижений! – Scumble373

0

Я тоже работаю над этим. Я сейчас смотрю документацию, и это говорит о функции: readFully()

Прочитайте содержимое моментального снимка.

Если этот снимок не был открыт с помощью open (GoogleApiClient, SnapshotMetadata), или если содержимое уже было зафиксировано с помощью commitAndClose (GoogleApiClient, Snapshot, SnapshotMetadataChange), этот метод выдаст исключение.

Возвращает Байт содержимого моментального снимка. Throws Ошибка IOException при чтении моментального снимка.

Вы уверены, что моментальный снимок был открыт и зафиксирован правильно?

+0

См. Мой ответ ниже для моего рабочего решения. – DJPJ

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