0Day Forums
Firebase "Failed to convert a value of type java.util.HashMap to int" - Printable Version

+- 0Day Forums (https://zeroday.vip)
+-- Forum: Coding (https://zeroday.vip/Forum-Coding)
+--- Forum: Database (https://zeroday.vip/Forum-Database)
+---- Forum: Firebase (https://zeroday.vip/Forum-Firebase)
+---- Thread: Firebase "Failed to convert a value of type java.util.HashMap to int" (/Thread-Firebase-quot-Failed-to-convert-a-value-of-type-java-util-HashMap-to-int-quot)



Firebase "Failed to convert a value of type java.util.HashMap to int" - raidenbh - 07-31-2023

At this line of my code in my `OnDataChange()` method in the `ValueEvenListener`:

int latest = dataSnapshot.getValue(Integer.class);

I'm getting a `DatabaseException` with the error `Failed to convert a value of type java.util.HashMap to int`.

However, in my database, you can take a look at the image below:

[![enter image description here][1]][1]

It is obviously not a `HashMap` but an `int`. Is this a bug or am I doing something wrong? What can I do to fix it? Why is it retrieving a `Hashmap` when the value is `int`?

**Full dataSnapshot:**

final DatabaseReference database = FirebaseDatabase.getInstance().getReference();
database.child("Campaigns").child(key).child("count");
database.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int latest = dataSnapshot.getValue(Integer.class);
button.setText(latest + "");
}

@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(context, context.getString(R.string.error) + ": " + databaseError.getMessage(), Toast.LENGTH_SHORT).show();
}
});

**Database:**

Campaigns:{
-JDKKDJIIDJFIDJKDK:{
count:2432
}
}

[1]:





RE: Firebase "Failed to convert a value of type java.util.HashMap to int" - sortie473 - 07-31-2023

It turns out I had to child dataSnapshot to my destination again. E.g:

int latest = dataSnapshot.child("Campaigns").child(key).child("count").getValue(Integer.class);

By default `dataSnapshot` is actually my whole database.




RE: Firebase "Failed to convert a value of type java.util.HashMap to int" - spelaean729 - 07-31-2023

This should work if we assume that the dataSnapshot is right.



final DatabaseReference database = FirebaseDatabase.getInstance().getReference();
database = database.child("Campaigns").child(key).child("count"); // replaced

database.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
int latest = Integer.valueOf(dataSnapshot.getValue().toString()); // replaced
button.setText(latest + "");
}

@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(context, context.getString(R.string.error) + ": " + databaseError.getMessage(), Toast.LENGTH_SHORT).show();
}
});

Reminder : **addValueEventListener** will run everytime there is a change in the dataSnapshot.
If you want to run it just once use **addListenerForSingleValueEvent** instead.


RE: Firebase "Failed to convert a value of type java.util.HashMap to int" - pleurolysis503733 - 07-31-2023

Your `ValueEventListener` is attached to the whole database.

// This line gets a reference to the whole database
final DatabaseReference database = FirebaseDatabase.getInstance().getReference();

// This line creates a child DatabaseReference, but you don't assign
// the child to a variable
database.child("Campaigns").child(key).child("count");

// This line adds a ValueEventListener to the whole database
database.addValueEventListener(new ValueEventListener() {

What you want instead is this:

final DatabaseReference database = FirebaseDatabase.getInstance().getReference()
final DatabaseReference countRef = database.child("Campaigns").child(key).child("count")
countRef.addValueEventListener(new ValueEventListener() {
// ...
});

You can see that in the latter example the ValueEventListener is attached to the child reference, not to the root.


RE: Firebase "Failed to convert a value of type java.util.HashMap to int" - borofluohydric399771 - 07-31-2023

HashMap<String, String> hashMap = (HashMap<String, String>) dataSnapshot1.getValue();
System.out.println("hehe " + hashMap);
String demo = String.valueOf(hashMap.get("sets"));
String name = String.valueOf(hashMap.get("name"));



The COde Above ^^^ Worked fine for me.