首页 > 解决方案 > 如何使用firebaseRecyclerAdapter在firebase数据库android中查询用户信息

问题描述

我正在尝试使用 firebaseRecyclerAdapter 为 android studio 中的用户实现搜索功能。我想要的是用户在编辑文本字段中输入其他用户并使用 firebase recycler 适配器进行搜索以显示搜索结果。新的 firebase UI 需要在 on create 方法中以不同方式定义 firebase 适配器。我不确定如何使用新的 firebase 适配器实现搜索查询。

搜索用户活动:

public class SearchUserActivity extends AppCompatActivity {


private RecyclerView mRecyclerView;
private EditText mSearchField;
private ImageButton mSearchButton;
private DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Users");
FirebaseRecyclerAdapter adapter;

@Override
protected void onStart() {
    super.onStart();
    adapter.startListening();
}

@Override
protected void onStop() {
    super.onStop();
    adapter.stopListening();
}



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

    mRecyclerView = findViewById(R.id.recyclerView);
    mSearchButton = findViewById(R.id.searchButton);
    mSearchField = findViewById(R.id.firebaseSearch);


    //mRecyclerView.setHasFixedSize(true);
    mSearchButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            //firebaseUserSearch(searchText);
            String searchText = mSearchField.getText().toString();

            Query firebaseSearchQuery = databaseReference.orderByChild("name")
                    .startAt(searchText)
                    .endAt(searchText + "\uf8ff");

            FirebaseRecyclerOptions<UserInfo> options = new FirebaseRecyclerOptions.Builder<UserInfo>()
                    .setQuery(firebaseSearchQuery, UserInfo.class).build();

            adapter = new FirebaseRecyclerAdapter<UserInfo, UsersViewHolder>(options) {

                @NonNull
                @Override
                public UsersViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.user_layout, parent, false);

                    return new UsersViewHolder(view);
                }

                @Override
                protected void onBindViewHolder(@NonNull UsersViewHolder holder, int position, @NonNull UserInfo model) {
                    holder.setDetails(model.name, model.status);
                }
            };
            mRecyclerView.setLayoutManager(new LinearLayoutManager(SearchUserActivity.this));
            mRecyclerView.setAdapter(adapter);

        }
        });
    };


private void firebaseUserSearch(String searchText) {

}




// viewholder class

public class UsersViewHolder extends RecyclerView.ViewHolder {

    View mView;

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


    public void setDetails(String userName,String userStatus) {
        TextView name = mView.findViewById(R.id.name);
        TextView status = mView.findViewById(R.id.status);


        name.setText(userName);
        status.setText(userStatus);

        }

    }
}

我想在 create 方法中设置一个单击侦听器以进行搜索。但是,我无法在 on click 侦听器中初始化 firebase 适配器,因为在 on start 方法期间,我必须在 on create 方法中设置适配器开始侦听。

标签: javaandroidfirebasefirebase-realtime-databasefirebaseui

解决方案


推荐阅读