2017-10-13 4 views
3

Ich versuche, eine einfache Statistikaktivität für mein Android-Spiel zu erstellen. Ich verwende die neue Firestore-Datenbank. Ich konnte ein Dokument in meiner Firestore-Datenbank mit einer Gesamtpunktzahl, einem letzten Punktestand, einem durchschnittlichen Punktestand, allen Spielen und einem hohen Punktestand speichern, aber wenn ich versuche, die Daten aus der Datenbank zu lesen, gibt es eine Null zurück.Speichern und lesen Integer Firestore Android

public void readFromDB(){ 
    statsDoc.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() { 
     @Override 
     public void onSuccess(DocumentSnapshot documentSnapshot) { 
      if(documentSnapshot.exists()){ 
       UserData userdata = documentSnapshot.toObject(UserData.class); 
      } 
     } 

Meine Userdata- Klasse:

/* Copyright statement */ 

package com.squidstudios.android.balloonpopper.utils; 

import com.google.firebase.database.IgnoreExtraProperties; 

/** 
* UserData.java 
* 
* This class represents a single user's data including username, email, number of points earned, 
* a saved state of their progress towards earning a single point, and their password. 
*/ 
@IgnoreExtraProperties 
public class UserData { 
    public String email; 
    public int total_points; 

public int avg_score; 
public int high_score; 
public int total_games; 
public int prev_score; 

public UserData() { 
    // Default constructor required for calls to DataSnapshot.getValue(UserData.class) 
} 


public int getTotal_games() { 
    return total_games; 
} 

public void setTotal_games(int total_games) { 
    this.total_games = total_games; 
} 

public int getTotal_points() { 
    return total_points; 
} 

public void setTotal_points(int total_points) { 
    this.total_points = total_points; 
} 

public int getAvg_score() { 
    return avg_score; 
} 

public void setAvg_score(int avg_score) { 
    this.avg_score = avg_score; 
} 

public int getHigh_score() { 
    return high_score; 
} 

public void setHigh_score(int high_score) { 
    this.high_score = high_score; 
} 


public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

public int getPrev_score() { 
    return prev_score; 
} 

public void setPrev_score(int prev_score) { 
    this.prev_score = prev_score; 
} 

} 

Es funktioniert gut, wenn ich es mit einer Schnur testen, aber aus irgendeinem Grund ganzen Zahlen funktionieren nicht. Danke im Voraus!

Antwort

4

Nachdem ich einige Tests gemacht hatte, kam ich zu dem Schluss, dass wir Longs zu Integers umwandeln müssen, denn das bekommen wir, wenn wir eine "Nummer" aus dem Firestore holen. Hier ist, was meine Daten wie folgt aussehen:
1]

sicher, dass Sie eine „Nummer“ gespeichert, indem am Ende des Feldes auf dem „Bearbeiten“ Symbol klicken:


Verwendung diesen das Casting zu tun: Safely casting long to int in Java

Mein Code sieht wie folgt aus:

int money = snapshot.getLong("money").intValue(); 


Fühlen Sie sich frei für eine weitere Erklärung zu fragen!

+0

Sieht gut aus für mich. Ich würde empfehlen, die NOT NULL-Prüfung zuerst durchzuführen, wenn das Feld nicht angegeben ist. – Jozef

Verwandte Themen