我花了數天的時間嘗試從測試人員的設備中找出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();
}
我得到的時候只需用後跟.writebytes。開()有時會保存在同一臺設備發生類似事故() 。
它使整個遊戲變得不穩定,我需要以某種方式解決這個問題。任何幫助或想法將不勝感激。
我所能想到的是,因爲它在AsyncTask的後臺線程上運行,所以在打開快照和嘗試在此設備上讀/寫它之間發生了不利的事情。根據測試者崩潰是最「最」的時間。
好聽。我不久前解決了我的問題。我現在保存和加載完美!現在開始實施排行榜和成就! – Scumble373 2014-12-02 23:23:36