Android 使用与Firebase的接口

Android 使用与Firebase的接口,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,目前,我正在为几个不同的类实现一个名为RowType的接口,比如说类a、B和C。我如何迭代Firebase以获得每个不同的对象 .addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSn

目前,我正在为几个不同的类实现一个名为RowType的接口,比如说类a、B和C。我如何迭代Firebase以获得每个不同的对象

.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                        RowType rowType = snapshot.getValue(RowType.class);
                        Log.d("awdjk", "qwjel");
                    }
我假设,由于Firebase中插入的所有对象都属于A类、B类或C类,因此我可以使用RowType获取快照值。但是,我得到一个错误,说“在类RowType上找不到要序列化的属性”

更新

接口

public interface RowType {
int EXERCISE_ROW = 0;
int REST_ROW = 1;
int SUPERSET_ROW = 2;
int PYRAMIDSET_ROW = 3;
int BUTTON_ROW = 4;
}
运动课

public class ExerciseModel implements RowType {
public String exercise, sets, reps, view, minutes, seconds, time, weight, childCount;
private EditText weightEditText, setsEditText, repsEditText;
private AutoCompleteTextView exerciseEditText;
private ImageView dragHandle;
private ExerciseRowTextWatcher exerciseRowTextWatcher;


public ExerciseRowTextWatcher getExerciseRowTextWatcher(){
    return exerciseRowTextWatcher;
}

public void setExerciseRowTextWatcher(ExerciseRowTextWatcher exerciseRowTextWatcher){
    this.exerciseRowTextWatcher = exerciseRowTextWatcher;
}


public ImageView getDragHandle(){
    return dragHandle;
}

public void setDragHandle(ImageView dragHandle){
    this.dragHandle = dragHandle;
}

public AutoCompleteTextView getExerciseEditText(){
    return exerciseEditText;
}

public void setExerciseEditText(AutoCompleteTextView exerciseEditText){
    this.exerciseEditText = exerciseEditText;
}

public EditText getWeightEditText(){
    return weightEditText;
}

public void setWeightEditText(EditText weightEditText){
    this.weightEditText = weightEditText;
}

public EditText getSetsEditText(){
    return setsEditText;
}

public void setSetsEditText(EditText setsEditText){
    this.setsEditText = setsEditText;
}

public EditText getRepsEditText(){
    return repsEditText;
}

public void setRepsEditText(EditText repsEditText){
    this.repsEditText = repsEditText;
}

public String getChildCount(){
    return childCount;
}

public void setChildCount(String childCount){
    this.childCount = childCount;
}

public String getExercise(){
    return exercise;
}

public String getWeight(){
    return weight;
}

public String getSets(){
    return sets;
}

public String getReps(){
    return reps;
}

public String getView(){
    return view;
}

public String getMinutes(){
    return minutes;
}

public String getSeconds(){
    return seconds;
}

public String getTime(){   return time;}

public void setExercise(String exercise){
    this.exercise = exercise;
}

public void setTime(String time){ this.time = time; }

public void setWeight(String weight){
    this.weight = weight;
}

public void setMinutes(String minutes){
    this.minutes = minutes;
}

public void setSeconds(String seconds){
    this.seconds = seconds;
}

public void setSets(String sets){
    this.sets = sets;
}

public void setView(String view){
    this.view = view;
}

public void setReps(String reps){
    this.reps = reps;
}

}

我在接口中实现了其他类,但为了保持简短,我只添加了exercise类。其他类相对类似。

您不能将其用作模型类、接口。这是不可能的,因为模型类必须具有Firebase所需的
公共无参数构造函数。我们知道,不能使用
new
关键字初始化接口,因此不能使用构造函数


为什么Firebase需要无参数构造函数?当Firebase实时数据库SDK反序列化来自数据库的对象时,它要求任何正在使用的对象都有一个公共的无参数构造函数,它可以用它来实例化对象,而这在接口上是不可能的,因为SDK不知道如何创建它的实例。

签出这个线程请添加你的类/接口代码。@AlexMamo我更新了我的代码那么我如何检查快照是属于类Exercise还是其他类?snapshot.getValue().getClass().getName()返回HashMap,即使我插入了类Exercise的对象也是正确的,因为Firebase中的每个节点都是
映射。您没有获得
练习
类的相应对象,因为您指向了错误的
数据库引用
。您需要在映射
练习
类的确切位置附加侦听器。你认为我的回答对你有帮助吗?