Android Firebase数据库无法将数据检索到类中(返回null)
一直在看教程和论坛,尝试了一切,仍然找不到解决方案。当我使用getValue()检索数据并将其放入对象时,它会看到值,但当我尝试使用getValue(Kontaktas.class)将值转换为空值时。我做错了什么 MAINAndroid 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.
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) {}
});