簡體   English   中英

如何從 firebase 實時數據庫子訪問數據?

[英]How to access data from firebase Realtime database child?

實時數據庫數據

我的實時數據庫 json

 "module1" : {
"Operating System" : {
  "pdfName" : "pdf",
  "pdfUrl" : "gs://knec-pastpapers.appspot.com/module1/OS/july2007.pdf"
}

}

我在訪問操作系統下的字段並在回收站視圖中顯示數據時遇到問題。 這是我的 model class

public class viewModel {
public String pdfName;
public String pdfUrl;


public viewModel() {

}

public viewModel(String pdfName, String pdfUrl) {
    this.pdfName = pdfName;
    this.pdfUrl=pdfUrl;
}


public String getPdfName() {
    return pdfName;
}

public void setPdfName(String pdfName) {
    this.pdfName = pdfName;
}

public String getPdfUrl() {
    return pdfUrl;
}

public void setPdfUrl(String pdfUrl) {
    this.pdfUrl = pdfUrl;
}

這就是我嘗試從實時數據庫訪問字段的方式

databaseReference= FirebaseDatabase.getInstance().getReference("ict").child("Operating System");
    getImageData();
}

private void getImageData() {
    databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            for (DataSnapshot di:dataSnapshot.getChildren()){
                viewModel articleList=di.getValue(viewModel.class);
                articleLists.add(articleList);
            }
            loadpdfsAdapter adapter=new loadpdfsAdapter(articleLists,getApplicationContext());
            rv.setAdapter(adapter);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
} 

運行代碼后,我的 recyclerview 是空的。 我的問題是如何訪問操作系統下的子節點?

僅當您獲得的快照具有多個viewModel子節點時,才需要for (DataSnapshot di:dataSnapshot.getChildren()){ 但是由於您從/ict/Operating System加載數據,因此只有一個viewModel子節點。

您要么必須刪除循環:

databaseReference= FirebaseDatabase.getInstance().getReference("ict").child("Operating System");

databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        viewModel articleList=dataSnapshot.getValue(viewModel.class);
        articleLists.add(articleList);
        ...

或者您可以加載所有ict然后循環遍歷子節點:

databaseReference= FirebaseDatabase.getInstance().getReference("ict");

databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for (DataSnapshot di:dataSnapshot.getChildren()){
            viewModel articleList=di.getValue(viewModel.class);
            articleLists.add(articleList);
        }
        ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM