如何从谷歌玩游戏中选择和加载保存的游戏快照

Posted

技术标签:

【中文标题】如何从谷歌玩游戏中选择和加载保存的游戏快照【英文标题】:How to Select and Load saved game snapshot from google play games 【发布时间】:2020-05-24 02:44:56 【问题描述】:

我在保存的游戏屏幕上,其中显示了所有保存的列表。当我选择保存的游戏时,应用程序崩溃并出现错误:android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.google.android.gms.games.snapshot.SnapshotMetadataEntity

这里的代码基本相同https://developers.google.com/games/services/android/savedgames?authuser=3&hl=sl

请帮忙。

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) 
        super.onActivityResult(requestCode, resultCode, intent);

        switch (requestCode) 
            case RC_LIST_SAVED_GAMES:
                if (resultCode == RESULT_OK) 
                    if (intent != null) 
                        if (intent.hasExtra(SnapshotsClient.EXTRA_SNAPSHOT_METADATA)) 
                            // Error occurs here when saved game is selected
                            SnapshotMetadata snapshotMetadata = intent.getParcelableExtra(SnapshotsClient.EXTRA_SNAPSHOT_METADATA);
                            assert snapshotMetadata != null;
                            sCurrentSaveName = snapshotMetadata.getUniqueName();
                            onLoadFromSnapshot(intent.getParcelableExtra(SnapshotsClient.EXTRA_SNAPSHOT_METADATA));
                         else if (intent.hasExtra(SnapshotsClient.EXTRA_SNAPSHOT_NEW)) 
                            String unique = Long.toString(System.currentTimeMillis());
                            sCurrentSaveName = "snapshotH-" + unique;
                            onSaveSnapshot(null);
                        
                    
                
                break;
        
    

这就是 Logcat 中显示的内容

2020-02-07 19:07:07.410 31988-31988/com.positivelymade.homeless2 E/AndroidRuntime: 致命异常: main 进程:com.positivelymade.homeless2,PID:31988 java.lang.RuntimeException:将结果 ResultInfowho=null, request=9005, result=-1, data=Intent (has extras) 传递到活动 com.positivelymade.homeless2/com.positivelymade.homeless2.MainActivity 失败:android.os.BadParcelableException:解组时 ClassNotFoundException:com.google.android.gms.games.snapshot.SnapshotMetadataEntity 在 android.app.ActivityThread.deliverResults(ActivityThread.java:4605) 在 android.app.ActivityThread.handleSendResult(ActivityThread.java:4647) 在 android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1948) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:214) 在 android.app.ActivityThread.main(ActivityThread.java:7045) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964) 引起:android.os.BadParcelableException:解组时ClassNotFoundException:com.google.android.gms.games.snapshot.SnapshotMetadataEntity 在 android.os.Parcel.readParcelableCreator(Parcel.java:2855) 在 android.os.Parcel.readParcelable(Parcel.java:2781) 在 android.os.Parcel.readValue(Parcel.java:2684) 在 android.os.Parcel.readArrayMapInternal(Parcel.java:3053) 在 android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:288) 在 android.os.BaseBundle.unparcel(BaseBundle.java:232) 在 android.os.BaseBundle.containsKey(BaseBundle.java:504) 在 android.content.Intent.hasExtra(Intent.java:7923) 在 com.positivelymade.homeless2.MainActivity.onActivityResult(MainActivity.java:222) 在 android.app.Activity.dispatchActivityResult(Activity.java:7759) 在 android.app.ActivityThread.deliverResults(ActivityThread.java:4598) 在 android.app.ActivityThread.handleSendResult(ActivityThread.java:4647) 在 android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1948) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:214) 在 android.app.ActivityThread.main(ActivityThread.java:7045) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)

【问题讨论】:

您找到解决方案了吗?我有同样的问题。 我使用 Firebase 构建了一个自定义保存游戏和加载游戏系统。 【参考方案1】:

就我而言,它不仅在我的发布版本中工作,因为它使用了 pro Guard。我通过添加 here 描述的 pro Guard 配置解决了它

【讨论】:

以上是关于如何从谷歌玩游戏中选择和加载保存的游戏快照的主要内容,如果未能解决你的问题,请参考以下文章

unity play 游戏服务云保存内部错误

从谷歌游戏控制台派生的 apk 无法正常工作,但原始 apk 工作正常

如何保存和加载用户创建的游戏对象?

谷歌游戏服务离线

获取对快照的引用。 Google Play 游戏服务保存的游戏

如何在pygame中保存/加载游戏功能?