не может преобразовать данные, поступающие из базы FireBase - PullRequest
0 голосов
/ 06 января 2019

Я получаю данные от дочернего элемента из базы данных Firebase, первый дочерний элемент после ссылки - «автомобили», которые я получаю с помощью mRoot. тогда я использую итеративно, чтобы добраться до каждого ребенка в "автомобили" тогда я получаю данные в автомобильный класс сначала я создал класс со строковыми значениями, затем он сказал, что вы не можете конвертировать длинные значения в строку затем я включил его в long и он сказал, что вы не можете конвертировать строковые значения в long

com.google.firebase.database.DatabaseException: не удалось преобразовать значение типа java.lang.Long в строку на com.google.android.gms.internal.firebase_database.zzkt.zzb (неизвестный источник) на com.google.android.gms.internal.firebase_database.zzkt.zza (неизвестный источник) на com.google.firebase.database.DataSnapshot.getValue (неизвестный источник) на com.example.ahmed.pointoflife.LogIn $ 1 $ 1.onDataChange (LogIn.java:55)

при смене

com.google.firebase.database.DatabaseException: не удалось преобразовать значение типа java.lang.String в long на com.google.android.gms.internal.firebase_database.zzkt.zzb (неизвестный источник) на com.google.android.gms.internal.firebase_database.zzkt.zza (неизвестный источник) на com.google.firebase.database.DataSnapshot.getValue (неизвестный источник) at com.example.ahmed.pointoflife.LogIn $ 1 $ 1.onDataChange (LogIn.java:55)

mRoot.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
                    Car car = new Car();
                    car.setHospital(childSnapshot.child("hospital").getValue(Long.class));
                    car.setId(childSnapshot.child("id").getValue(Long.class));
                    car.setPassword(childSnapshot.child("password").getValue(Long.class));
                    h.put(car.getId().toString(),car);
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });


package com.example.ahmed.pointoflife;
import com.google.firebase.database.PropertyName;
public class Car {

    private Long hospital,id,password;
    public Car(Long hospital,Long id,Long passowrd)
    {
     this.hospital = hospital;
     this.id = id;
     this.password = passowrd;

    }
    Car(){

    }

    @PropertyName("hospital")
    public Long getHospital() {
        return hospital;
    }

    public void setHospital(Long hospital) {
        this.hospital = hospital;
    }

    @PropertyName("id")
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @PropertyName("password")
    public Long getPassword() {
        return password;
    }

    public void setPassword(Long password) {
        this.password = password;
    }
}

огненное дерево https://drive.google.com/file/d/17xYkrFwZqscCdrzvfkStr6cC-VYaQHI1/view?usp=sharing

как я могу правильно взять эти значения из базы данных без проблем

1 Ответ

0 голосов
/ 06 января 2019

Предполагая, что mRoot указывает на корень Firebase, для решения этой проблемы измените следующую строку кода:

mRoot.addValueEventListener(*/ ... */);

до

mRoot.child("cars").addValueEventListener(*/ ... */);

А чтобы получить объект Car, вы можете просто использовать:

Car car = childSnapshot.getValue(Car.class);

Редактировать: Теперь вы можете увидеть всю структуру вашей базы данных. Чтобы решить эту проблему, используйте следующие строки кода:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference carsRef = rootRef.child("cars");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            Car car = ds.getValue(Car.class);
            Log.d(TAG, car.getHospital());
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
carsRef.addListenerForSingleValueEvent(valueEventListener);

Вывод в вашем logcat будет: 11.

Или, проще, используя класс Long:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference carsRef = rootRef.child("cars");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            Long hospital = ds.child("hospital").getValue(Long.class);
            Log.d(TAG, hospital);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
carsRef.addListenerForSingleValueEvent(valueEventListener);

Вывод будет таким же.

Также нет необходимости использовать @PropertyName, потому что все ваши поля в классе соответствуют полям в вашей базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...