我正在努力从Firebase中检索一些数据,并且我遵循了一些正常工作的Youtube教程,
但无处不在,检索工作不再有效,
我设置的路径是正确的,但即使有我检索的数据,我也会得到一个空列表。
private ListView mListView;
private ArrayList<String> mHospitalNames= new ArrayList<>();
private Firebase mRefRoot;
这是路径:
mRefRoot=new Firebase("https://prototype-d2a84.firebaseio.com/Search/"+countryName+"/"+mCity+"/"+bloodType);
这是我正在使用的代码:
mListView = (ListView) findViewById(R.id.listview);
final ArrayAdapter<String> mArrayAdapter= new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mHospitalNames);
mListView.setAdapter(mArrayAdapter);
mRefRoot.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String value = dataSnapshot.getValue(String.class);
mHospitalNames.add(value);
mArrayAdapter.notifyDataSetChanged();
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
这就是我的数据库的样子
有人能说我错了吗?
答案 0 :(得分:1)
如果您不使用身份验证,请检查数据库中的规则是否设置为true
{
"rules": {
".read": "true",
".write": "true"
}
}
如果这不是问题,那么检查你的数据快照正在返回什么。如果您的数据库是这样的
root
-country
-city
-bloodgroup
-B+
-123:something
-111:something
然后你必须给出你想要获得价值的钥匙。示例
datasnapshot.child(“B +”)。child(“123”)。getValue(); //第一个孩子,即123 datasnapshot.child(“B +”)。child(“111”)。getValue(); //第二个孩子,即111
否则,如果您想要整个值集,则可以使用不同的键多次使用上面的行,或者使用类来一次获取所有值。
根据您的数据库,您将密钥作为数字,我建议更改并保留字符串,因为如果您使用类,这将导致检索数据时出现问题。
class mClass{
private String first;
private String second;
mClass(){}
mClass(String first,String second){
this.first=first;
this.second=second;
}
public String getFirst(){
return this.first;
}
public String getSecond(){
return this.second;
}
}
现在您可以在此课程中获取数据。
mClass mclass = datasnapshot.getValue(mClass.class);
现在,您想要使用此数据,只需调用getter函数。
text.setText(mclass.getFirst());
答案 1 :(得分:0)
修改您的代码
初始化变量
private FirebaseDatabase mFirebaseDatabase;
private DatabaseReference mMessagesDatabaseReference;
private ChildEventListener mChildEventListener;
//for list view
private ListView mListView;
private MessageAdapter mAdapter;
在onCreate
mFirebaseDatabase=FirebaseDatabase.getInstance();
mMessagesDatabaseReference=mFirebaseDatabase.getReference().child("search").child("country").child("city").child("blood group");
List<String> data = new ArrayList<>();
mAdapter = new Adapter(this, R.layout.data,data);
mListView.setAdapter(mAdapter);
dataRead();
dataRead方法
private void dataRead() {
if ( mChildEventListener == null) {
mChildEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String value = dataSnapshot.getValue(String.class);
mAdapter.add(value);
}
public void onChildChanged(DataSnapshot dataSnapshot, String s) {}
public void onChildRemoved(DataSnapshot dataSnapshot) {}
public void onChildMoved(DataSnapshot dataSnapshot, String s) {}
public void onCancelled(DatabaseError databaseError) {}
};
mMessagesDatabaseReference.addChildEventListener( mChildEventListener);
}
}
String.class应如下所示。注意公共变量和空构造函数。
public class User {
public String user;
public String emailId;
public long timeStampStart;
public long timeStampStop;
public long diff;
public User()
{
}
public User(String user,String emailId,long timeStampStart,long timeStampStop,long diff)
{
this.user=user;
this.emailId=emailId;
this.timeStampStart=timeStampStart;
this.timeStampStop=timeStampStop;
this.diff=diff;
}
public String GetUser()
{
return user;
}
public String GetEmailId()
{
return emailId;
}
public long GetTimeStampStart()
{
return timeStampStart;
}
public long GetTimeStampStop()
{
return timeStampStop;
}
public long GetDiff()
{
return diff;
}
public void setUser(String user)
{
this.user=user;
}
public void setEmailId(String emailId)
{
this.emailId=emailId;
}
public void setTimeStampStart(long timeStampStart)
{
this.timeStampStart=timeStampStart;
}
public void setTimeStampStop(long timeStampStop)
{
this.timeStampStop=timeStampStop;
}
public void setDiff(long diff)
{
this.diff=diff;
}
}
现在数据库看起来应该是这样的。根据您的需要进行修改
search
country
-city
-blood group
-123
abc:something
bcd:something
如果出现任何问题,请告诉我