首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firebase搜索功能

Firebase搜索功能
EN

Stack Overflow用户
提问于 2018-12-27 14:56:06
回答 1查看 45关注 0票数 0

代码

代码语言:javascript
复制
        mRecyclerView = (RecyclerView) rootview.findViewById(R.id.recyclerView);
    //Add the data first
    linearLayoutManager = new LinearLayoutManager(getActivity());
    mRecyclerView.setLayoutManager(linearLayoutManager);


    mDataabseReference = FirebaseDatabase.getInstance().getReference().child("UserData");


    mSearchButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            final String mSearchText = mEditText.getText().toString();

            mSearch(mSearchText);
        }
    });
    return rootview;
}

private void mSearch(final String mSearchText) {
    Query searchQuery = mDataabseReference;

    FirebaseRecyclerOptions<SearchHelper> options =
            new FirebaseRecyclerOptions.Builder<SearchHelper>()
                    .setQuery(searchQuery, SearchHelper.class)
                    .build();
    firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<SearchHelper, Search.SearchViewHolder>(options) {

        @Override
        protected void onBindViewHolder(@NonNull final Search.SearchViewHolder holder, int position, @NonNull final SearchHelper model) {


            String uid = getRef(position).getKey();
          mDataabseReference.child(uid).startAt(mSearchText).endAt(mSearchText + "\uf8ff").addValueEventListener(new ValueEventListener() {
              @Override
             public void onChildAdded(DataSnapshot dataSnapshot, String s) {

                 for (DataSnapshot ds : dataSnapshot.getChildren()) {
                      SearchHelper search = dataSnapshot.getValue(SearchHelper.class);
                      mSearchList.add(search);

                  }
              }

              @Override
              public void onChildChanged(DataSnapshot dataSnapshot, String s) {

              }
              @Override
              public void onChildRemoved(DataSnapshot dataSnapshot) {

              }

              @Override
              public void onChildMoved(DataSnapshot dataSnapshot, String s) {

              }

              @Override
              public void onDataChange(DataSnapshot dataSnapshot) {
                  SearchHelper search = dataSnapshot.getValue(SearchHelper.class);
                  mSearchList.add(search);
              }

              @Override
              public void onCancelled(DatabaseError databaseError) {

              }
          });
        }
        @Override
        public SearchViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            return null;
        }


    };
    mRecyclerView.setAdapter(firebaseRecyclerAdapter);
    firebaseRecyclerAdapter.startListening();

}

public static class SearchViewHolder extends RecyclerView.ViewHolder {
        View mView;

        public SearchViewHolder(View itemView) {
            super(itemView);
            mView = itemView;
        }

        public void setName(String title) {
            TextView nameText = (TextView) mView.findViewById(R.id.name);
            nameText.setText(title);
        }
        public void setUserName(String title) {
            TextView nameText = (TextView) mView.findViewById(R.id.username);
            nameText.setText(title);
        }
        public void setImage(String image) {
            CircularImageView mDisplayImage = (CircularImageView) mView.findViewById(R.id.circleImageView);
            Picasso.get().load(image).into(mDisplayImage);
        }

没有结果显示...

我已经尝试了Childevent和ValueEvent,我已经尝试了for循环,但没有使用它。

数据库

我不知道哪里错了,我也厌倦了尝试,因为也没有错误,我也不知道我错在哪里。有人能帮我指出错误吗?

EN

回答 1

Stack Overflow用户

发布于 2018-12-27 15:03:29

在Firebase中搜索始终是一个分两步进行的方法:

  1. Order data
    1. 根据该排序规则筛选数据

您在代码中遗漏了步骤1:没有指明要订购的内容。

例如,如果您尝试按名称搜索用户日期,则查询将变为:

代码语言:javascript
复制
mDataabseReference.child(uid)
                  .orderByChild("Name")
                  .startAt(mSearchText).endAt(mSearchText + "\uf8ff")
                  .addValueEventListener(new ValueEventListener() {

另一个错误是您在onChildAdded中查看dataSnapshot.getChildren()。但是onChildAdded已经为每个单独的子节点触发,所以不需要循环:

代码语言:javascript
复制
 public void onChildAdded(DataSnapshot dataSnapshot, String s) {
     SearchHelper search = dataSnapshot.getValue(SearchHelper.class);
     mSearchList.add(search);
 }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53940961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档