java - FirebaseUI RecycleView 搜索不工作

标签 java android firebase firebase-realtime-database firebaseui

这是我的 SearchGetterSetter.java 代码:

package com.me.Admin;

public class SearchGetterSetter {

String fname;

public SearchGetterSetter(String fname) {
    this.fname = fname;
}

public String getFname() {
    return fname;
}

public void setFname(String fname) {
    this.fname = fname;
}
}

这是我的 SearchUserActivity.java 代码

package com.me.Admin;

  import android.support.annotation.NonNull;
  import android.support.v7.app.AppCompatActivity;
  import android.os.Bundle;
  import android.support.v7.widget.LinearLayoutManager;
  import android.support.v7.widget.RecyclerView;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.EditText;
  import android.widget.ImageButton;
  import android.widget.TextView;
  import android.widget.Toast;

  import com.firebase.ui.database.FirebaseRecyclerAdapter;
  import com.firebase.ui.database.FirebaseRecyclerOptions;
  import com.google.firebase.FirebaseException;
  import com.google.firebase.database.DatabaseReference;
  import com.google.firebase.database.FirebaseDatabase;
  import com.google.firebase.database.Query;
  import com.infoters.killansfitnessstudio.R;
  public class SearchUserActivity extends AppCompatActivity {
private EditText SearchTxt;
private ImageButton SearchBtn;
private RecyclerView SearchRV;

private DatabaseReference mUserDatabase;

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

    mUserDatabase = FirebaseDatabase.getInstance().getReference("users");
    SearchTxt = findViewById(R.id.SearchUserTxt);
    SearchBtn = findViewById(R.id.SearchUserBtn);
    SearchRV = findViewById(R.id.SearchUserRV);
    SearchRV.setHasFixedSize(true);
    SearchRV.setLayoutManager(new LinearLayoutManager(this));


    SearchBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String searchText = SearchTxt.getText().toString();
            firebaseUserSearch(searchText);

        }
    });

}

private void firebaseUserSearch(String searchText) {

    Query firebaseSearchQuery = mUserDatabase.child("fname");

    FirebaseRecyclerOptions<SearchGetterSetter> response = new 
FirebaseRecyclerOptions.
            Builder<SearchGetterSetter> 
    ().setQuery(firebaseSearchQuery,SearchGetterSetter.class).build();
    FirebaseRecyclerAdapter<SearchGetterSetter,UserViewHolder> Fire = new 
FirebaseRecyclerAdapter<SearchGetterSetter, UserViewHolder>(response){
        @NonNull
        @Override
        public UserViewHolder onCreateViewHolder(@NonNull ViewGroup 
viewGroup, int i) {
            View view = LayoutInflater.from(viewGroup.getContext())
                    .inflate(R.layout.search_user_item, viewGroup, false);
            return new UserViewHolder(view);
        }
        @Override
        protected void onBindViewHolder(@NonNull UserViewHolder holder, int 
      position, @NonNull SearchGetterSetter model) {
            holder.fName.setText(model.getFname());
        }

    };

    Fire.notifyDataSetChanged();
    SearchRV.setAdapter(Fire);
}

public class UserViewHolder extends RecyclerView.ViewHolder{
    private TextView fName;
    public UserViewHolder(@NonNull View itemView) {
        super(itemView);
        fName = itemView.findViewById(R.id.SUTxt);

    }
}

}

我想从 Firebase 实时数据库中搜索 fname。在搜索按钮按下时,我调用了 firebaseUserSearch() 方法。

我尝试了几种方法,但都不适合我。我猜我做错了 FirebaseRecycleViewAdapter。我提到了this .我哪里出错了?

编辑:

这是我的数据库结构Database Stucture

更新代码:

public class SearchUserActivity extends AppCompatActivity {

private EditText SearchTxt;
private ImageButton SearchBtn;
private RecyclerView SearchRV;

private DatabaseReference mUserDatabase;

private FirebaseRecyclerAdapter<SearchGetterSetter,UserViewHolder> Fire;

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

    mUserDatabase = FirebaseDatabase.getInstance().getReference("users");
    SearchTxt = findViewById(R.id.SearchUserTxt);
    SearchBtn = findViewById(R.id.SearchUserBtn);
    SearchRV = findViewById(R.id.SearchUserRV);
   //        SearchRV.setHasFixedSize(true);
    SearchRV.setLayoutManager(new LinearLayoutManager(this));


    SearchBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String searchText = SearchTxt.getText().toString();
            firebaseUserSearch(searchText);
            Toast.makeText(SearchUserActivity.this, "Clicked", 
        Toast.LENGTH_SHORT).show();

        }
    });

}

private void firebaseUserSearch(String searchText) {

    Query firebaseSearchQuery = mUserDatabase.orderByChild("fname").startAt(searchText).endAt(searchText + "\uf8ff");

    FirebaseRecyclerOptions<SearchGetterSetter> response = new FirebaseRecyclerOptions.
            Builder<SearchGetterSetter>().setQuery(firebaseSearchQuery,SearchGetterSetter.class).build();

    Fire = new FirebaseRecyclerAdapter<SearchGetterSetter, UserViewHolder>(response){
        @NonNull
        @Override
        public UserViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
            View view = LayoutInflater.from(viewGroup.getContext())
                    .inflate(R.layout.search_user_item, viewGroup, false);
            return new UserViewHolder(view);
        }
        @Override
        protected void onBindViewHolder(@NonNull UserViewHolder holder, 
       int position, @NonNull SearchGetterSetter model) {
            holder.fname.setText(model.getFname());
        }

    };

    Fire.startListening();
    Fire.notifyDataSetChanged();
    SearchRV.setAdapter(Fire);

}

public static class UserViewHolder extends RecyclerView.ViewHolder{
    private TextView fname;
    public UserViewHolder(@NonNull View itemView) {
        super(itemView);
        fname = (TextView) itemView.findViewById(R.id.SUTxt);
    }
}


}

最佳答案

你的声明:

Query firebaseSearchQuery = mUserDatabase.child("fname");

应该是

Query firebaseSearchQuery = mUserDatabase.orderByChild("fname").equals(searchText);

正如我看到您的代码,您没有在查询中使用 searchText 变量。

关于java - FirebaseUI RecycleView 搜索不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54529751/

相关文章:

Android:布局在 gridview 的底部(在它的末尾)

javascript - 没有在 firestore 中获取自定义文档

java - 删除 Firebase 数据库的值后应用程序崩溃

java - 第二个数字在 1 到 5 范围内(含)是什么意思?

java - 通过遍历<tr id>从后代标签的getAttribute中获取ID,然后遍历到td,然后输入标签以获取其id

java - Eclipse错误: Target runtime Apache Tomcat v7. 0未定义

android - android中如何访问多个数据库表的数据?

android - 如何使用 Android 的本地网络服务发现找到所有可用的服务

android - Firebase 统计数据

ios - 谷歌登录后使用电子邮件登录Firebase出现错误: The password is invalid or the user does not have a password