He mirado algunas otras respuestas para problemas similares pero no entiendo por qué la mía no funciona. En mi base de datos de base de fuego, tengo una lista de usuarios que tienen información diferente debajo de ellos. Me gustaría recuperar información de un userId actual para recyclingview.

Mi código se ve así:

  DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference databaseStatus = rootRef.child("other");
    String uid = firebaseAuth.getInstance().getCurrentUser().getUid();
    databaseStatus.child(uid).addValueEventListener(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot snapshot) {

            for (DataSnapshot ds : snapshot.getChildren()) {

                for (DataSnapshot dSnapshot : ds.getChildren()) {

                    OtherClass otherClass = dSnapshot.getValue(OtherClass.class);
                    Log.d("Show", otherClass.getOname() == null ? "" : otherClass.getOname());
                    list.add(otherClass);
                }

                adapter = new ShowOtherDetails.OtherAdapter(ShowOtherDetails.this, list);
                recyclerView.setAdapter(adapter);
                adapter.notifyDataSetChanged();
                progressDialog.dismiss();
            }
        }

Lo que me da este error:

  com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.mycare.OtherClass

La estructura de datos de la base de fuego se ve así:

enter image description here

Por favor, ¿alguien puede ayudarme?

3
shivani patil 15 feb. 2018 a las 20:15

2 respuestas

La mejor respuesta

Prueba esto:

Al guardar haz esto:

    String key = databaseStatus.child(uid).push().getKey()

Para que pueda obtener la clave.


Luego agregue la clave como un niño al recuperar aquí en el primer método

databaseStatus.child(uid).child(key).addValueEventListener(new ValueEventListener() {

   @Override
    public void onDataChange(DataSnapshot snapshot) {



                OtherClass otherClass = snapshot.getValue(OtherClass.class);
                Log.d("Show", otherClass.getOname() == null ? "" : otherClass.getOname());
                list.add(otherClass);
            }

Eliminar el bucle for for (DataSnapshot ds : snapshot.getChildren())

O haz esto:

    databaseStatus.child(uid).addValueEventListener(new ValueEventListener() {

    @Override
    public void onDataChange(DataSnapshot snapshot) {

        for (DataSnapshot ds : snapshot.getChildren()) {

            for (DataSnapshot dSnapshot : ds.getChildren()) {

                String date=dataSnapshot.child("date").getValue().toString();
  String detail=dataSnapshot.child("detail").getValue().toString();
  String email=dataSnapshot.child("email").getValue().toString();
  String id=dataSnapshot.child("id").getValue().toString()
   //and so on
            }
3
Peter Haddad 15 feb. 2018 a las 18:09
i hope its work, Try this

 public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    for (DataSnapshot ds : dataSnapshot.getChildren()) {


                        String date= ds.child("date").getValue(String.class);
                        String detail= ds.child("detail").getValue(String.class);
                        String email= ds.child("email").getValue(String.class);
                        String id= ds.child("id").getValue(String.class);
                        Log.d("TAG", date+ " / "+detail+" / "+email+" / "+id);
                        OtherClass otherClass = new OtherClass(date,detail,email,id);
                        listdata.add(otherClass);

                    }

                    recyclerView.setAdapter(adpter);
                    adpter.notifyDataSetChanged();

                }
0
Emon Raihan 9 mar. 2020 a las 07:29