15

I'm trying to create a simple Stats activity for my Android game. I'm using the new Firestore database. I have been able to save a document to my Firestore database with a total score, recent score, avg score, total games, and high score, but when i try to read the data back from the database it returns a null.

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

My Userdata class:

/* 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; } } 

It works fine when I test it out with string but for some reason integers are not working. Thanks in advance!

2 Answers 2

33

After doing some tests I got to the conclussion we're gonna have to cast Longs to Integers, since that's what we get from fetching a "Number" from firestore. Here's what my data looks like:
1]

Make sure you stored a "Number" by clicking on the "edit" icon at the end of the field:


Use this to do the casting: Safely casting long to int in Java

My code looks like this:

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


Feel free to ask for further explanation!

Sign up to request clarification or add additional context in comments.

1 Comment

Looks good to me. I would recommend to do the NOT NULL check first for case when field is not provided.
0

enter code here float TotalAmount = Float.parseFloat (String.valueOf(ObjectsrequireNonNull(getSnapshots().getSnapshot(position).getLong("TotalAmount"))));

Try it........ 101 %%%%

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.