如何使用Firebase查询带有匿名密钥的数据

时间:2018-10-18 17:21:04

标签: firebase firebase-realtime-database firebaseui

我有以下数据库数据,打算使用FirebaseListAdapter显示在ListView上 enter image description here

我的问题是创建查询,因为日期之后的子元素是匿名的。这是查询代码

 Query query = FirebaseDatabase.getInstance().getReference().child("Updates").child(refMail).child(day)
            .orderByKey();

refMail和day分别是用户电子邮件地址和日期。

这也是我的数据模型类

public class NotesDataModel {

private String Note;
private String uid;
private String time;

public NotesDataModel(){

}

public NotesDataModel(String Note, String uid, String time){
    this.Note=Note;
    this.uid=uid;
    this.time=time;
}

public String getNote() {
    return Note;
}

public void setNote(String note) {
    Note = note;
}

public String getUid() {
    return uid;
}

public void setUid(String uid) {
    this.uid = uid;
}

public String getTime() {
    return time;
}

public void setTime(String time) {
    this.time = time;
}}

最后是适配器初始化

 FirebaseListOptions<NotesDataModel> options = new FirebaseListOptions.Builder<NotesDataModel>()
            .setQuery(query, NotesDataModel.class)
            .setLayout(R.layout.notes_cell_layout)
            .build();

    mAdapter = new FirebaseListAdapter<NotesDataModel>(options) {
        @Override
        protected void populateView(View view, NotesDataModel note, int position) { //some code }}; notesList.setAdapter(mAdapter);

以前的版本是这样的

ref = FirebaseDatabase.getInstance().getReferenceFromUrl(FactoryDaftari.firebaseURL + "Updates/" + refMail + "/" + day);

和适配器初始化

mAdapter = new FirebaseListAdapter<NotesDataModel>(this, NotesDataModel.class, R.layout.notes_cell_layout, ref) {

        @Override
        protected void populateView(View view, NotesDataModel note, int position) { }};

1 个答案:

答案 0 :(得分:0)

您将无法使用数据的结构方式进行此查询。在NoSQL数据库中通常会制作数据副本,这些副本的结构化目的是为了进行专门的查询。因此,如果要查询注释列表,则需要一个结构,其中所有注释都是同一父项的子项,然后针对该结构进行查询。

(此外,像现在一样,通过带有日期的节点组织笔记可能甚至不是最好的常规结构。)