【发布时间】:2014-10-04 08:32:53
【问题描述】:
我花了几天时间试图从测试人员的设备上找出导致 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 的后台线程上运行,所以在打开快照和尝试在此设备上读/写它之间发生了一些不好的事情。根据测试人员的说法,“大部分”时间都会崩溃。
【问题讨论】:
标签: android google-play-services google-play-games