Google Saved Games (writeSnapshot)

  • Hallo zusammen,

    ich bin mittlerweile am Verzweifeln, weswegen ich mich erstmals in einem Forum angemeldet habe. Also verzeiht bitte etwaige Fehler bezüglich falscher Kategorie oder dergleichen.

    zu meinem Problem, ich möchte für mein Spiel den Saved Games Cloud Service von Google nutzen.

    Konnte auch soweit alles einfügen und mit meinem Spiel verbinden. Anmelden funktioniert auch soweit.

    Nun bekomme ich den Fehler einer null Object Referenz, beim Schreiben der Bytes.

    Beim Build tritt kein Fehler auf, also dachte ich es liegt am Format. Habe es mit Strings, Long, Integer, Bytes u.s.w versucht auch mit verschiedenen Konvertierungen (z.b. getBytes()). Aber ständig das gleiche Ergebnis.

    Wie muss ich dieses Byte Array deklarieren damit es von der Methode erkannt wird?

    Vielen Dank für eure Hilfe ;)

    Hier ein Ausschnitt aller relevanten Codeabschnitte


    Spoiler anzeigen


    // [START write_snapshot]
    public PendingResult<Snapshots.CommitSnapshotResult> writeSnapshot(Snapshot snapshot,
    byte[] data, Bitmap coverImage, String desc) {

    // Set the data payload for the snapshot
    snapshot.getSnapshotContents().writeBytes(data); //////////////////////////////////////////////////////////Hier Steckt irgendwo das Problem

    // Create the change operation
    SnapshotMetadataChange metadataChange = new SnapshotMetadataChange.Builder()
    .setCoverImage(coverImage)
    .setDescription(desc)
    .build();

    // Commit the operation
    return Games.Snapshots.commitAndClose(mGoogleApiClient, snapshot, metadataChange);
    }
    // [END write_snapshot]

    Im Spiel writeSnapshot(snapshot, byteTest, image, mCurrentSaveName);

    Und der Fehlercode

    java.lang.NullPointerException: Attempt to invoke interface method 'com.google.android.gms.games.snapshot.SnapshotContents com.google.android.gms.games.snapshot.Snapshot.getSnapshotContents()' on a null object reference

  • Hi,

    Im Stacktrace kannst du genauehen, in welcher Zeile Du ein Problem hast. Der Nullpointer bedeutet, dass ein Objekt nicht initialisiert wurde und du dementsprechend noch keine Methode mit dem Objet ausführen kannst.
    Dir fehl irgendwo eine Initialisierung des Objektes z.B. in der Form

    Klasse objekt = new Klasse (...)

  • Danke vielmals, ich war so fixiert auf den Byte Array Parameter, dass ich übersehen habe das es am Snapshot Parameter lag. ;)


    Gut, das Snapshot Problem ist geklärt, doch der Fehler tritt jetzt beim Byte Array auf. initialisiert ist es, meines erachtens.

    public byte[] byteTest;im SpielbyteTest = new byte[10];habe es mit Werten gefüllt, gleiches Ergebnis.

    Einmal editiert, zuletzt von Bastian1990 (12. März 2016 um 09:39)

  • In der Logcat ausgabe siehst du nicht nur welche Zeile sondern auch noch direkt welches Objekt. Du hast versucht eine Methode getSnapshotContents() auf ein null objekt anzuwenden. Damit kannst du einfach schauen wo die methode aufgerufen wird und hast schon das Objekt was nicht initialisiert ist.

    Also merke: immer genau die Fehlermeldungen lesen :P

  • Die Fehlermeldung hatte leider nicht viel gebracht, der fehler lag im endeffekt irgendwo tiefer im Code.
    Zugegeben der Code von Google ist auch sehr verwirrend.
    Für diejenigen welche auch Probleme damit haben sollten, ich habe es dann so gelöst, dass ich das Saved Game Sample von Google kopiert habe, dann alle Programmabschnitte mit der veralteten AppStateApi
    gelöscht und diverse Anpassungen bezüglich der Views vorgenommen habe, da ich eine Engine benutze und keine Views.

    Aber danke an alle die geholfen haben ;)

  • Es war eine NullpointerException die nur auftritt wenn du ein Objekt nicht initialisierst. Entweder hast du uns die falsche Exception kopiert oder der Fehler lag genau dort.

  • Denke auch, irgendwo hab ich bestimmt was übersehen. Ich habe nun alles soweit zum laufen gebracht. Nur gibt es bei der Verbindung Probleme vieleicht kennt ja jemand den Fehler und hatte schon Erfahrung damit.

    Es scheint dass ich als Nutzer irgendwie nicht angemeldet bin. In der App aber schon, neu ab und wieder anmelden bringt leider auch nichts.

    Kann es sein dass ich in der App außer der Id noch irgend eine Art Schlüssel intigrieren muss?

    Danke für eure Hilfe

    Spoiler anzeigen

    {"error":{"errors":[{"domain":"usageLimits","reason":"dailyLimitExceededUnreg","message":"Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.","extendedHelp":"https://code.google.com/apis/console"}],"code":403,"message":"Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."}}

    Und im Log steht folgendes

    Spoiler anzeigen

    03-13 15:47:39.807 2057-2057/? V/GLSActivity: AuthDelegateWrapperCreated with selected intent: Intent { cmp=com.google.android.gms/.auth.DefaultAuthDelegateService }
    03-13 15:47:39.809 2057-2057/? V/GLSActivity: AuthDelegateWrapperCreated with selected intent: Intent { cmp=com.google.android.gms/.auth.DefaultAuthDelegateService }
    03-13 15:47:40.362 2023-5680/? E/Volley: [237] BasicNetwork.performRequest: Unexpected response code 404 for https://www.googleapis.com/drive/v2intern…iewedDate=false
    03-13 15:47:40.367 2023-10188/? W/NetworkResponseErrorDecoder: StatusCode:404 Reason:[notFound] Location:[file]
    03-13 15:47:40.396 2023-10187/? W/SnapshotAgent: Failed to find snapshot file Snapshot-1
    03-13 15:47:40.396 866-1467/? W/AppOps: Bad call: specified package com.google.android.play.games under uid 10337 but it is really 10162
    03-13 15:47:40.397 866-886/? W/AppOps: Bad call: specified package com.google.android.play.games under uid 10337 but it is really 10162
    03-13 15:47:40.400 9821-10186/? W/SavedGames: Could not open Snapshot for update.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!