在Firebase Live数据库中搜索内容

时间:2019-03-28 21:36:45

标签: android firebase-realtime-database

当我在Firebase数据库中搜索项目时,我没有收到错误,但根本没有任何价值。通过调试器时,实际上已设置了editText中的值,并且在Query中搜索这些值时,它们没有显示:

final EditText t = (EditText) findViewById(R.id.DjNameET);

        mProfileDatabase = FirebaseDatabase.getInstance().getReference();

        t.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
                if(i == EditorInfo.IME_ACTION_SEARCH)
                {
                    searchData = t.getText().toString();


                    return true;
                }
                return false;
            }
        });

        ImageButton imgB= (ImageButton) findViewById(R.id.searchBtn);

        imgB.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view)
            {
                query = mProfileDatabase.child("djprofile").orderByChild("djName")
                        .startAt(searchData)
                        .endAt(searchData + "\uf8ff");

                FirebaseRecyclerOptions<DjProfile> firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<DjProfile>()
                        .setQuery(query, DjProfile.class)
                        .build();
                firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<DjProfile, ResultsViewHolder>(firebaseRecyclerOptions)
                {

                    @NonNull
                    @Override
                    public ResultsViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
                        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.searchitem_list, viewGroup, false);

                        return new ResultsViewHolder(view);
                    }

                    @Override
                    protected void onBindViewHolder(@NonNull ResultsViewHolder holder, int position, @NonNull DjProfile model) {
                        holder.setDjProfile(model);
                    }
                };
                firebaseRecyclerAdapter.startListening();
                recyclerView.setAdapter(firebaseRecyclerAdapter);
            }
        });

实时数据库的外观如下:

enter image description here

在我的编辑文本中,当我搜索“ DjRockSauce”时,recyclerview中未显示任何结果,这是因为我没有正确地进入查询路径,如果是这种情况,我如何正确获取搜索和显示结果的文件路径?

2 个答案:

答案 0 :(得分:2)

遇到此类问题时,正确的方法是尝试找出问题所在,不是问题所在。

第一步可能是查看是否可以显示未过滤的配置文件。

query = mProfileDatabase.child("djprofile");

如果显示所有配置文件,则说明您构建的路径正确。

如果是这种情况,我会尝试使用硬编码的搜索字符串:

query = mProfileDatabase.child("djprofile").orderByChild("djName")
        .startAt("Dr")
        .endAt("Dr\uf8ff");

如果这也可行,那么问题在于您如何获得搜索词,您应该对此进行调查。

答案 1 :(得分:0)

在@Frank van Puffelen的帮助下弄清楚,我的问题是我正在调用searchText,并且它返回null。实际上,我实际上需要按如下所示将物理EditText名称的文本传递到搜索查询中:

            query = mProfileDatabase.child("djprofile").orderByChild("djName")
                    .startAt(t.getText().toString()).endAt(t.getText().toString() + "\uf8ff");