Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数据从Firebase检索到实体中_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 将数据从Firebase检索到实体中

Java 将数据从Firebase检索到实体中,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在尝试从Firebase数据库检索数据,以将其添加到本地数据库 此代码: database = FirebaseDatabase.getInstance(); myRef = database.getReference(); Query LANGUAGES_REF = myRef.child("languages").orderByChild("id"); LANGUAGES_REF.addChildEventListener(new ChildEventListener() {

我正在尝试从Firebase数据库检索数据,以将其添加到本地数据库

此代码:

database = FirebaseDatabase.getInstance();
myRef = database.getReference();     
Query LANGUAGES_REF = myRef.child("languages").orderByChild("id");

LANGUAGES_REF.addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {    
                if (dataSnapshot.hasChildren()) {
                Iterator<DataSnapshot> iterator = dataSnapshot.getChildren().iterator();
                       do {
                           Language language = iterator.next().getValue(Language.class);
                           languageR.insert(language);
                          } while (iterator.hasNext());
               }
谢谢

编辑: firebase数据库结构

"languages" : {
    "LHZ7cAeOdPn-LwHNjIk" : {
        "id" : 1,
        "langName" : "Russian"
    },
    "LHZ7cAtXTGBlnWsdQOd" : {
        "id" : 2,
        "langName" : "French"
    },
    "LHZ7cAvrRs0rgI-PaJd" : {
        "id" : 3,
        "langName" : "Turkish"
    }
}
语言类

import java.io.Serializable;

import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity
public class Language implements Serializable {

    @PrimaryKey(autoGenerate = true)
    private int id;

    private String langName;

    public int getId() {
        return id;
    }

    public String getLangName() {
        return langName;
    }

    public Language(String langName) {
        this.langName = langName;
    }

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

要解决此问题,您需要删除
do while
循环,因为不需要使用
getChildren()
方法进行迭代,您可以直接从
dataSnapshot
对象获取数据,如下所示:

@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
    Language language = dataSnapshot.getValue(Language.class);
    languageR.insert(language);
    Log.d(TAG, language.getLangName());
}
logcat中的输出将为:

Russian
French
Turkish

请添加数据库结构。还请添加用于获取数据的完整代码,包括附加侦听器的引用。添加代码后,请回复一条注释。很抱歉之前发布了一点信息,事实上,我创建了一个languageCast类,它工作正常,现在的问题是,是否有另一个使用Entity language.class的解决方案?现在我得到的是一个
Database.Entities.language没有定义无参数构造函数。如果您使用的是ProGuard,请确保这些构造函数没有被剥离我添加了一个无参数构造函数和一个
@Ignore
注释符,它工作得很好。。。非常感谢@alexmamo
Russian
French
Turkish