Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FirebaseUI RecycleView搜索不工作_Java_Android_Firebase_Firebase Realtime Database_Firebaseui - Fatal编程技术网

Java FirebaseUI RecycleView搜索不工作

Java FirebaseUI RecycleView搜索不工作,java,android,firebase,firebase-realtime-database,firebaseui,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

以下是我的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);

    }
}

}

要创建搜索功能,您需要创建如下所示的查询:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("users");
Query query = usersRef.orderByChild("fname").equalTo(searchedText);
因此,每次搜索名称时,都应该返回一个新的查询对象。因此,每次您希望在新条件下进行筛选时,您都需要:

  • 根据新搜索的文本创建一个新的查询:

    Query query = usersRef.orderByChild("name").equalTo(searchedText);
    
  • 将侦听器附加到此新创建的查询

  • 使用新创建的查询的结果创建新适配器,或使用
    notifydatasetchanged()
    方法更新现有适配器

  • 你的声明如下:

    Query firebaseSearchQuery = mUserDatabase.child("fname");
    
    应该是

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

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

    @rishikesh_07您检查过我的答案了吗?找到解决方案了吗?用
    .orderByChild(“fname”)
    代替
    .orderByChild(“用户”)
    在循环视图中获取UID有什么方法吗?在存储数据时,您必须使用一个类似
    UID
    的字段来存储它。您能帮我吗?
    Query firebaseSearchQuery = mUserDatabase.orderByChild("fname").equals(searchText);