AndroidJavaException: java.lang.NoSuchMethodError: 没有 name='getStatusCode' signature='()I' 的非静态方法

问题描述

当我尝试使用 Google Play 游戏插件保存或加载我的游戏时(即使我已登录),logcat 向我显示

this error

尝试了不同的方法来保存游戏,但它再次显示并且再次。附言成就和排行榜运行良好。

这是我调用保存和加载过程的脚本:

     #if UNITY_ANDROID
 using UnityEngine;
 using System;
 using System.Collections.Generic;
 //gpg
 using GooglePlayGames;
 using GooglePlayGames.BasicApi;
 using GooglePlayGames.BasicApi.SavedGame;
 //for encoding
 using System.Text;
 //for extra save ui
 using UnityEngine.socialPlatforms;
 //for text,remove
 using UnityEngine.UI;
 
 public class SaveManager :MonoBehavIoUr{
 
     private static SaveManager _instance;
     public static SaveManager Instance{
         get{
             if (_instance == null) {
                 _instance = new SaveManager();
             }
             return _instance;
         }
     }
 
     //keep track of saving or loading during callbacks.
     private bool m_saving;
     //save name. This name will work,change it if you like.
     private static string m_saveName = "game_save_name";
     //This is the saved file. Put this in seperate class with other variables for more advanced setup. Remember to change merging,toBytes and fromBytes for more advanced setup.
     private string saveString = "";
 
     //check with GPG (or other*) if user is authenticated. *e.g. GameCenter
     private bool Authenticated {
         get {
             return Social.Active.localUser.authenticated;
         }
     }
 
     //merges loaded bytearray with old save
     private void ProcessCloudData(byte[] cloudData) {
         if (cloudData == null) {
             Debug.Log("No data saved to the cloud yet...");
             return;
         }
         Debug.Log("Decoding cloud data from bytes.");
         string progress = FromBytes(cloudData);
         Debug.Log("Merging with existing game progress.");
         MergeWith(progress);
     }
 
     //load save from cloud
     public void LoadFromCloud(){
         Debug.Log("Loading game progress from the cloud.");
         m_saving = false;
         ((PlayGamesPlatform)Social.Active).SavedGame.OpenWithAutomaticConflictResolution(
             m_saveName,//name of file.
             DataSource.ReadCacheOrNetwork,ConflictResolutionStrategy.UseLongestPlaytime,SavedGameOpened);
     }
 
     //overwrites old file or saves a new one
     public void SavetoCloud() {
         if (Authenticated) {
             Debug.Log("Saving progress to the cloud... filename: " + m_saveName);
             m_saving = true;
             //save to named file
             ((PlayGamesPlatform)Social.Active).SavedGame.OpenWithAutomaticConflictResolution(
                 m_saveName,//name of file. If save doesn't exist it will be created with this name
                 DataSource.ReadCacheOrNetwork,SavedGameOpened);
         } else {
             Debug.Log("Not authenticated!");
         }
     }
 
     //save is opened,either save or load it.
     private void SavedGameOpened(SavedGameRequestStatus status,ISavedGameMetadata game) {
         //check success
         if (status == SavedGameRequestStatus.Success){
             //saving
             if (m_saving){
                 //read bytes from save
                 byte[] data = ToBytes();
                 //create builder. here you can add play time,time created etc for UI.
                 SavedGameMetadataUpdate.Builder builder = new SavedGameMetadataUpdate.Builder();
                 SavedGameMetadataUpdate updatedMetadata = builder.Build();
                 //saving to cloud
                 ((PlayGamesPlatform)Social.Active).SavedGame.CommitUpdate(game,updatedMetadata,data,SavedGameWritten);
             //loading
             } else {
                 ((PlayGamesPlatform)Social.Active).SavedGame.ReadBinaryData(game,SavedGameLoaded);
             }
         //error
         } else {
             Debug.LogWarning("Error opening game: " + status);
         }
     }
 
     //callback from SavedGameOpened. Check if loading result was successful or not.
     private void SavedGameLoaded(SavedGameRequestStatus status,byte[] data) {
         if (status == SavedGameRequestStatus.Success){
             Debug.Log("SaveGameLoaded,success=" + status);
             ProcessCloudData(data);
         } else {
             Debug.LogWarning("Error reading game: " + status);
         }
     }
 
     //callback from SavedGameOpened. Check if saving result was successful or not.
     private void SavedGameWritten(SavedGameRequestStatus status,ISavedGameMetadata game) {
         if (status == SavedGameRequestStatus.Success){
             Debug.Log("Game " + game.Description + " written");
         } else {
             Debug.LogWarning("Error saving game: " + status);
         }
     }
 
     //merge local save with cloud save. Here is where you change the merging betweeen cloud and local save for your setup.
     private void MergeWith(string other) {
         if (other != "") {
             saveString = other;
         } else {
             Debug.Log("Loaded save string doesn't have any content");
         }
     }
 
     //return saveString as bytes
     private byte[] ToBytes() {
         byte[] bytes = Encoding.UTF8.GetBytes(saveString);
         return bytes;
     }
 
     //take bytes as arg and return string
     private string FromBytes(byte[] bytes) {
         string decodedString = Encoding.UTF8.GetString(bytes);
         return decodedString;
     }
 
     // -------------------- ### Extra UI for testing ### -------------------- 
 
     //call this with Unity button to view all saves on GPG. Bug: Can't close GPG window for some reason without restarting.
     public void showUI() {
         // user is ILocalUser from Social.LocalUser - will work when authenticated
         ShowSavesystemUI(Social.localUser,(SelectUIStatus status,ISavedGameMetadata game) => {
             // do whatever you need with save bundle
         });
     }
     //displays savefiles in the cloud. This will only include one savefile if the m_saveName hasn't been changed
     private void ShowSavesystemUI(ILocalUser user,Action<SelectUIStatus,ISavedGameMetadata> callback) {
         uint maxnumTodisplay = 3;
         bool allowCreateNew = true;
         bool allowDelete = true;
 
         ISavedGameClient savedGameClient = PlayGamesPlatform.Instance.SavedGame;
 
         if (savedGameClient != null) {
             savedGameClient.ShowSelectSavedGameUI(user.userName + "\u0027s saves",maxnumTodisplay,allowCreateNew,allowDelete,ISavedGameMetadata saveGame) => {
                     // some error occured,just show window again
                     if (status != SelectUIStatus.SavedGameSelected) {
                         ShowSavesystemUI(user,callback);
                         return;
                     }
 
                     if (callback != null)
                         callback.Invoke(status,saveGame);
                 });
         } else {
             // this is usually due to incorrect APP ID
             Debug.LogError("Save Game client is null...");
         }
     }
 
 }
 #endif 

................................

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)