我在尝试从Firebase获取一些数据时遇到问题。我以前做过这个,直到现在都没有问题。我有一个firebase帮助程序,它加载数据然后将其添加到自定义arraylist。现在,数据显示但没有添加到arraylist,我不知道为什么。
以下是从数据库获取数据的代码:
class FirebaseHelper {
// objects
private final DatabaseReference db;
private final ArrayList<ListData> contactData = new ArrayList<>();
private final HomeActivity activity;
// ------------------------------
FirebaseHelper(DatabaseReference db, HomeActivity ac){
this.db = db;
this.activity = ac;
}
// ------------------------------
private void fetchData(DataSnapshot dSnap){
// Clear arraylist
contactData.clear();
// Populate with new data
for(DataSnapshot ds: dSnap.getChildren() ) {
ListData data = ds.getValue(ListData.class);
contactData.add(data);
}
// TODO: Setup listview and adapter after data has loaded
ContactAdapter adapter = new ContactAdapter(activity, contactData, activity);
ListView listView = activity.findViewById(R.id.itemList);
listView.setAdapter(adapter);
} // end fetchData
// ------------------------------
ArrayList<ListData> retrieve() {
final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
assert user != null;
db.child("contacts").child(user.getUid()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
fetchData(dataSnapshot);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return contactData;
} // end retrieve
} // end FirebaseHelper
现在,我获取数据,但不会添加。
而我得到的只是这个空项目清单。
如果需要更多信息,请告诉我。
这是ListData类
class ListData implements Serializable {
private String contactName;
private String contactNum;
private int contactAge;
private String userId;
ListData(){}
// setter
public void setContactAge(int contactAge) {
this.contactAge = contactAge;
}
public void setContactName(String contactName) {
this.contactName = contactName;
}
public void setContactNum(String contactNum) {
this.contactNum = contactNum;
}
public void setUserId(String userId) {
this.userId = userId;
}
// getter
String getContactName() {
return contactName;
}
String getContactNum() {
return contactNum;
}
int getContactAge() {
return contactAge;
}
String getUserId() {
return userId;
}
} // end ListData
我明白了。我不确定为什么数据没有发布,即使它在那里。我不知道ListData中的对象(string,int)必须与检索到的数据上的键/值完全相同。一旦我将ListData上的所有名称更改为正确的键值,现在将显示所有数据。