从Android中firebase的特定用户检索数据

从Android中firebase的特定用户检索数据,android,firebase,firebase-realtime-database,firebaseui,Android,Firebase,Firebase Realtime Database,Firebaseui,我正在尝试从firebase实时数据库读取“特定”数据。我看到过从一个表中获取所有数据并通过它查找所需数据记录的示例。 下面是我如何保存数据的` FirebaseDatabase database; DatabaseReference foodList; String categoryId=""; FirebaseRecyclerAdapter<Food,FoodViewHolder>adapter; FirebaseRecyclerAdapter<Food,FoodView

我正在尝试从firebase实时数据库读取“特定”数据。我看到过从一个表中获取所有数据并通过它查找所需数据记录的示例。 下面是我如何保存数据的`

FirebaseDatabase database;
DatabaseReference foodList;
String categoryId="";

FirebaseRecyclerAdapter<Food,FoodViewHolder>adapter;
FirebaseRecyclerAdapter<Food,FoodViewHolder>searchAdapter;
List<String> suggestList=new ArrayList<>();
MaterialSearchBar materialSearchBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_food_list);


    database=FirebaseDatabase.getInstance();
    foodList=database.getReference("Foods");

    recyclerView=findViewById(R.id.recycler_food);
    recyclerView.setHasFixedSize(true);
    layoutManager=new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);


    if(getIntent()!=null)
    {
        categoryId=getIntent().getStringExtra("CategoryId");
    }
    if(!categoryId.isEmpty() )
    {
        loadListFood(categoryId);
    }


    materialSearchBar=findViewById(R.id.searchBar);
    materialSearchBar.setHint("Enter food name");

    loadSuggestion();
    materialSearchBar.setLastSuggestions(suggestList);
    materialSearchBar.setCardViewElevation(10);
    materialSearchBar.addTextChangeListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            List<String>suggest=new ArrayList<>();
            for (String search:suggestList)
            {
                if(search.toLowerCase().contains(materialSearchBar.getText().toLowerCase()))
                    suggest.add(search);
            }
            materialSearchBar.setLastSuggestions(suggest);
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
    materialSearchBar.setOnSearchActionListener(new MaterialSearchBar.OnSearchActionListener() {
        @Override
        public void onSearchStateChanged(boolean enabled) {

            if(!enabled)
            {
                recyclerView.setAdapter(adapter);
            }

        }

        @Override
        public void onSearchConfirmed(CharSequence text) {
            startSearch(text);

        }

        @Override
        public void onButtonClicked(int buttonCode) {

        }
    });


}

private void startSearch(CharSequence text) {
    searchAdapter = new FirebaseRecyclerAdapter<Food, FoodViewHolder>(
            Food.class,
            R.layout.food_item,
            FoodViewHolder.class,
            foodList.orderByChild("Name").equalTo(text.toString())// compare Food Name//////
    ) {
        @Override
        protected void populateViewHolder(FoodViewHolder viewHolder, Food model, int position) {

            viewHolder.food_name.setText(model.getName());
            Picasso.with(getBaseContext()).load(model.getImage()).into(viewHolder.food_image);
            final Food local=model;
            viewHolder.setItemClickListner(new ItemClickListner() {
                @Override
                public void onClick(View view, int position, boolean isLongClick) {
                    Toast.makeText(FoodList.this,""+local.getName(),Toast.LENGTH_SHORT).show();//there is problem local.getName???????????
                    //Start new Acitvity
                    Intent foodDetail=new Intent(FoodList.this,FoodDetail.class);
                    foodDetail.putExtra("FoodId",searchAdapter.getRef(position).getKey());//send Food ID to new Acitivity
                    startActivity(foodDetail);
                }
            });
        }
    };
    recyclerView.setAdapter(searchAdapter);
}

private void loadSuggestion() {
    foodList.orderByChild("MenuId").equalTo(categoryId)
            .addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot postSnapshot:dataSnapshot.getChildren() )
                    {
                        Food item=postSnapshot.getValue(Food.class);
                        suggestList.add(item.getName());

                    }

                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
}

private void loadListFood(String categoryId) {
    adapter=new FirebaseRecyclerAdapter<Food, FoodViewHolder>(Food.class,
            R.layout.food_item,
            FoodViewHolder.class,
            foodList.orderByChild("menuId").equalTo(categoryId))
    {
        @Override
        protected void populateViewHolder(FoodViewHolder viewHolder, Food model, int position) {
         viewHolder.food_name.setText(model.getName());
         Picasso.with(getBaseContext()).load(model.getImage()).into(viewHolder.food_image);
         final Food local=model;
         viewHolder.setItemClickListner(new ItemClickListner() {
             @Override
             public void onClick(View view, int position, boolean isLongClick) {
                 Toast.makeText(FoodList.this,""+local.getName(),Toast.LENGTH_SHORT).show();

                 Intent foodDetail=new Intent(FoodList.this,FoodDetail.class);
                 foodDetail.putExtra("FoodId",adapter.getRef(position).getKey());
                 startActivity(foodDetail);
             }
         });
        }
    };

    recyclerView.setAdapter(adapter);
}
}
firebase数据库;
数据库参考食物列表;
字符串categoryId=“”;
火基回收器适配器;
FirebaseRecyclerAdaptersearchAdapter;
List suggestList=新建ArrayList();
材料搜索栏材料搜索栏;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u food\u list);
database=FirebaseDatabase.getInstance();
foodList=database.getReference(“Foods”);
recyclerView=findViewById(R.id.回收商\食品);
recyclerView.setHasFixedSize(true);
layoutManager=新的LinearLayoutManager(此);
recyclerView.setLayoutManager(layoutManager);
如果(getIntent()!=null)
{
categoryId=getIntent().getStringExtra(“categoryId”);
}
如果(!categoryId.isEmpty())
{
载货清单食品(分类);
}
materialSearchBar=findViewById(R.id.searchBar);
materialSearchBar.setHint(“输入食品名称”);
loadSuggestion();
materialSearchBar.setLastSuggestions(建议列表);
材料搜索栏。设置卡片视图立面图(10);
materialSearchBar.addTextChangeListener(新的TextWatcher(){
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
Listsuggest=新建ArrayList();
for(字符串搜索:suggestList)
{
if(search.toLowerCase().contains(materialSearchBar.getText().toLowerCase()))
建议。添加(搜索);
}
材料搜索栏。设置最新建议(建议);
}
@凌驾
公共无效后文本已更改(可编辑){
}
});
materialSearchBar.setOnSearchActionListener(新materialSearchBar.OnSearchActionListener(){
@凌驾
SearchStateChanged上的公共void(已启用布尔值){
如果(!已启用)
{
recyclerView.setAdapter(适配器);
}
}
@凌驾
搜索已确认的公共无效(字符序列文本){
startSearch(文本);
}
@凌驾
公共无效onButtonClicked(int buttonCode){
}
});
}
专用void startSearch(字符序列文本){
searchAdapter=新FirebaseRecyclerAdapter(
食品类,
R.布局图.食品项目,
FoodViewHolder.class,
foodList.orderByChild(“名称”).equalTo(text.toString())//比较食品名称//////
) {
@凌驾
受保护的void populateViewHolder(食品文件夹viewHolder,食品模型,内部位置){
viewHolder.food_name.setText(model.getName());
Picasso.with(getBaseContext()).load(model.getImage())到(viewHolder.food_image)中;
最终食品=本地模型;
viewHolder.setItemClickListner(新项目ClickListner(){
@凌驾
公共void onClick(视图、int位置、布尔值isLongClick){
Toast.makeText(FoodList.this,“+local.getName(),Toast.LENGTH\u SHORT).show();//local.getName存在问题???????????
//开创新城市
Intent foodDetail=newintent(FoodList.this,foodDetail.class);
foodDetail.putExtra(“FoodId”,searchAdapter.getRef(position.getKey());//将食物ID发送到新活动
星触觉(食物尾巴);
}
});
}
};
recyclerView.setAdapter(searchAdapter);
}
私人建议(){
foodList.orderByChild(“MenuId”).equalTo(类别ID)
.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
对于(DataSnapshot postSnapshot:DataSnapshot.getChildren())
{
Food item=postSnapshot.getValue(Food.class);
添加(item.getName());
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}
私有void loadListFood(字符串类别ID){
适配器=新的FirebaseRecyclerAdapter(Food.class、,
R.布局图.食品项目,
FoodViewHolder.class,
foodList.orderByChild(“menuId”).equalTo(categoryId))
{
@凌驾
受保护的void populateViewHolder(食品文件夹viewHolder,食品模型,内部位置){
viewHolder.food_name.setText(model.getName());
Picasso.with(getBaseContext()).load(model.getImage())到(viewHolder.food_image)中;
最终食品=本地模型;
viewHolder.setItemClickListner(新项目ClickListner(){
@凌驾
公共void onClick(视图、int位置、布尔值isLongClick){
Toast.makeText(FoodList.this,“+local.getName(),Toast.LENGTH_SHORT.show();
Intent foodDetail=newintent(FoodList.this,foodDetail.class);
foodDetail.putExtra(“FoodId”,adapter.getRef(position.getKey());
星触觉(食物尾巴);
}
});
}
};
recyclerView.setAdapter(适配器);
}
}
更新

当我试图从firebase获取数据以更新食物列表时,我没有发现要更改的数据库。下面是我要更新的数据库


database.getReference(“Foods”);您的数据库中没有食品节点,我认为用类别替换食品将解决此问题。getReference(“类别”);我想更新食物清单的数据,我正在做这个项目[链接](),但我没有得到