一直在观看教程和论坛,尝试了一切,仍然无法找到解决方案。当我使用getValue()检索数据并将其放在对象中时,它会看到值,但是当我尝试使用getValue(Kontaktas.class)的类时,值为null。我做错了什么?
主要
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) {
}
});
}
}
Kontaktas.java
package com.juliusj.gym.easy;
public class Kontaktas {
private String vardas;
private String telefonas;
public Kontaktas()
{}
public Kontaktas(String vardas, String telefonas){
this.vardas = vardas;
this.telefonas = telefonas;
}
public String getVardas() { return vardas; }
public void setVardas(String vardas) {
this.vardas = vardas;
}
public String getTelefonas() {
return telefonas;
}
public void setTelefonas(String telefonas) {
this.telefonas = telefonas;
}
}
答案 0 :(得分:1)
我第一次看到的错误是,您的数据库中的字段和模型类中的字段是不同的!在您的数据库中,您的Telefonas
字段为大写T
,而在您的模型类中,您的telefonas
字段为小t
。两个文件必须相同。您可以更改数据库中的键,也可以更改模型类。但我建议您删除实际数据并使用正确的模型类添加新数据。
此外,如果您尝试在mList
方法之外打印onDataChange()
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) {}
});
如果您想使用mList
外onDataChange()
方法,则需要创建自己的回调,为此,我建议您从 {{3}查看我的答案的最后一部分} 强>