从Firebase数据库路径问题检索数据时出现问题-Android

时间:2020-02-26 20:34:46

标签: android firebase firebase-realtime-database

我想从数据库中检索数据并将其插入到recycleview中。 问题是我不知道可以从谁那里获取数据集中的数据。

首先,看看我的数据集结构:Json在下面添加:

"Places" : {
"-M11-OIIHbKTVqCJ-Swv" : {
  "name" : "Farmacia Pagani Dr. Roberto",
  "others" : {
    "01" : {
      "Nome" : "Ambilify",
      "Price" : 100
    },
    "02" : {
      "Nome" : "Acetaminophoen",
      "Price" : 120
    }
  }
},
"-M11-OJJCGAPdJUknLXX" : {
  "name" : "FARMACIA DR. TUMIATTI MARIANO",
  "others" : {
    "01" : {
      "Nome" : "Ambilify",
      "Price" : 100
    },
    "02" : {
      "Nome" : "Acetaminophen",
      "Price" : 120
    }
  }
}
},

所以我想要的是:由于我具有键“ -M11-OIIHbKTVqCJ-Swv”,因此我想使用该键在对象内执行搜索。为此,我需要访问位置/关键对象(-M11-OIIHbKTVqCJ-Swv)/其他,然后基于Nome(意为意大利语)进行搜索。我想退回Nome:Ambilify价格:100

这就是我所做的:

 private void firebaseUserSearch(String searchText) {
    DatabaseReference  searchforData = FirebaseDatabase.getInstance().getReference("Places");

    Toast.makeText(FirebaseSearch.this, "Started Search", Toast.LENGTH_LONG).show();
    System.out.println("keyNameOfFarmacy"+keyNameOfFarmacy);
    Query firebaseSearchQuery = searchforData.orderByChild(keyNameOfFarmacy).orderByChild("others").orderByChild("Nome").startAt(searchText).endAt(searchText + "\uf8ff");
    FirebaseRecyclerAdapter<DataDetails, UsersViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<DataDetails, UsersViewHolder>(
            DataDetails.class,
            R.layout.list_layout,
            UsersViewHolder.class,
            firebaseSearchQuery
    ) {
        @Override
        protected void populateViewHolder(UsersViewHolder viewHolder, DataDetails model, int i) {
            viewHolder.getDetails(model.getNome(), model.getPrice());
            viewHolder.setDetails(model.getNome(), model.getPrice());
        }

    };
    mResultList.setAdapter(firebaseRecyclerAdapter);
}

我对这部分代码有疑问,因为:orderByChild只能使用一次。

任何人都可以告诉我如何获取数据,我在过去的2 3 h中迷失了寻找方法,但没有找到任何东西。先感谢您。

1 个答案:

答案 0 :(得分:1)

更改此:

    Query firebaseSearchQuery = searchforData.orderByChild(keyNameOfFarmacy).orderByChild("others").orderByChild("Nome").startAt(searchText).endAt(searchText + "\uf8ff");

对此:

    Query firebaseSearchQuery = searchforData.child(keyNameOfFarmacy).child("others").orderByChild("Nome").startAt(searchText).endAt(searchText + "\uf8ff");

您已经可以访问otherskey,因此只需使用childorderByChild即可Nome