Android Firebase数据库无法将数据检索到类中(返回null)

Android Firebase数据库无法将数据检索到类中(返回null),android,firebase,firebase-realtime-database,getvalue,Android,Firebase,Firebase Realtime Database,Getvalue,一直在看教程和论坛,尝试了一切,仍然找不到解决方案。当我使用getValue()检索数据并将其放入对象时,它会看到值,但当我尝试使用getValue(Kontaktas.class)将值转换为空值时。我做错了什么 MAIN package com.juliusj.gym.easy; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.google.firebase.

一直在看教程和论坛,尝试了一切,仍然找不到解决方案。当我使用getValue()检索数据并将其放入对象时,它会看到值,但当我尝试使用getValue(Kontaktas.class)将值转换为空值时。我做错了什么

MAIN

    package com.juliusj.gym.easy;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    DatabaseReference mRef, mIn;
    List<Kontaktas> mList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mList = new ArrayList<>();
        mRef = FirebaseDatabase.getInstance().getReference();
        //mRef = FirebaseDatabase.getInstance().getReferenceFromUrl("https://easy-683ba.firebaseio.com/users");
        mIn = mRef.child("users");
        mIn.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                //shake hands
                for (DataSnapshot unit : dataSnapshot.getChildren()){
                    Kontaktas value = unit.getValue(Kontaktas.class);
                    mList.add(value);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }
}


我第一次看到的错误是,数据库中的字段与模型类中的字段不同!在您的数据库中,您的
Telefonas
字段是大写
T
,在您的模型类中,您有
Telefonas
,小写
T
。两个文件必须相同。您可以更改数据库中的键,也可以更改模型类。但我建议您删除实际数据,并使用正确的models类添加新数据

此外,如果您试图在
onDataChange()
方法之外打印
mList
ArrayList的值,您将得到一个空列表。这是因为
onDataChange()
方法具有异步行为。要解决此问题,请使用以下代码:

mIn.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<Kontaktas> mList = new ArrayList<>();
        for (DataSnapshot unit : dataSnapshot.getChildren()){
            Kontaktas value = unit.getValue(Kontaktas.class);
            mList.add(value);
        }
        Log.d("TAG", mList);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
});
mIn.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
List mList=new ArrayList();
for(DataSnapshot单位:DataSnapshot.getChildren()){
Kontaktas值=unit.getValue(Kontaktas.class);
增加(价值);
}
Log.d(“标签”,mList);
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){}
});

如果您想使用
mList
外部
onDataChange()
方法,您需要创建自己的回调,为此,我建议您查看我的答案的最后一部分,谢谢!大写和小写字母改变了一切。真不敢相信我花了3天的时间试图找到解决方案——如果你是个初学者,这种情况一直在发生。如果你认为我的答案对你有帮助,请考虑通过点击箭头左侧的勾选来接受它。应该把颜色改成绿色。谢谢
mIn.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<Kontaktas> mList = new ArrayList<>();
        for (DataSnapshot unit : dataSnapshot.getChildren()){
            Kontaktas value = unit.getValue(Kontaktas.class);
            mList.add(value);
        }
        Log.d("TAG", mList);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
});