通过子值(名称)搜索Firebase,填充匹配名称的列表,然后向该列表添加意图

时间:2019-03-30 13:32:25

标签: java android firebase-realtime-database

我正在尝试在数据库中搜索Firebase中的某个特定发布,如果该发布存在,我想检索与此相关的所有数据并将其显示在列表视图中。因此,在下面的示例中,如果用户键入:“这是我们的酒吧名称”,我希望将以下所有数据添加到“饮料”列表中(数据类称为“饮料”)。

这是数据库结构:

{"Drinks" : {

"-L_JfWQv7xMQfXUvtFhH" : {

  "comment" : "This is my test comment. ",
  "location" : "This is our location.",
  "price" : "This is our price",
  "pub" : "This is our pub name.",
  "rating" : "This is our rating",
  "signature" : "This is my signature"
}

一旦搜索结果显示在列表视图中,我希望能够单击搜索结果,并在列表中显示该Drink记录中存储的值。

我希望我对这个问题的解释比原来的问题要好。

我将显示的代码是我为操纵当前函数而不得不检索数据库中所有记录的尝试。

public void searchDB(){

    String searchedString = searchText.toString();



    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

    Query searchRef = rootRef.child("Drinks").orderByChild("pub").equalTo(searchedString);
    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot ds : dataSnapshot.getChildren()){
                CapDrink drink = ds.getValue(CapDrink.class);

                drinkList.add(drink);
                list.setAdapter(adapter);
            }
        }


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

        }
    };

    searchRef.addListenerForSingleValueEvent(valueEventListener);



    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            Intent i = new Intent(Search.this, DrinkIndexed.class);
            i.putExtra("ValueKey", drinkList.get(position).getPub());
            i.putExtra("ValueKey2", drinkList.get(position).getLocation());
            i.putExtra("ValueKey3", drinkList.get(position).getPrice());
            i.putExtra("ValueKey4", drinkList.get(position).getRating());
            i.putExtra("ValueKey5", drinkList.get(position).getComment());
            i.putExtra("ValueKey6", drinkList.get(position).getSignature());

            startActivity(i);


        }
    });
}

我希望用户能够在“ searchText”文本视图中输入名称,并将该值传递到数据库查询中,然后让查询返回匹配的实体

1 个答案:

答案 0 :(得分:0)

因此,显然我的问题是Android Studio糟糕透顶,而不是我的代码。对于以后引用此问题的任何人,此代码将查询您的Firebase数据库,在列表视图中显示匹配的记录,并使该列表视图上的记录可单击(即,有此意图,您可以从中进行任何操作) :

from PySide import QtSvg                                                                                                                                                                                                                                                             
from PySide.QtCore import QLocale                                                                                                                                                                                                                                                    
from PySide.QtGui import *                                                                                                                                                                                                                                                           

if __name__ == "__main__":                                                                                                                                                                                                                                                           
    import sys                                                                                                                                                                                                                                                                       

    app = QApplication(sys.argv)                                                                                                                                                                                                                                                     
    svgWidget = QtSvg.QSvgWidget('file.svg')                                                                                                                                                                                                                             
    svgWidget.show()                                                                                                                                                                                                                                                                 

    sys.exit(app.exec_())       

感谢大家的时间和精力!