检索时未显示Firebase数据

时间:2018-03-03 22:12:34

标签: java android firebase firebase-realtime-database

我在尝试从Firebase获取某些数据时遇到问题。我之前做过这件事,直到现在才出现问题。我有一个firebase帮助程序,它加载数据然后将其添加到自定义arraylist。现在,数据显示但没有添加到arraylist中,我不确定原因。

  • 做了一些测试,我注意到" ListData数据= ds.getValue(ListData.class)"填充数据的位置无效。它不会将数据正确地设置为ListData类。但我不知道为什么。

以下是从数据库获取数据的代码:

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

现在,我获得数据,但它不会添加。

enter image description here

我得到的只是这个空项目清单。

enter image description here

如果需要更多信息,请告知我们。

这里是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

1 个答案:

答案 0 :(得分:0)

我明白了。我不确定为什么数据即使在那里也没有发布。我不知道ListData中的对象(string,int)必须与检索到的数据上的键/值完全相同。将ListData上的所有名称更改为正确的键值后,现在将显示所有数据。