Java FirebaseUI RecycleView搜索不工作
以下是我的SearchGetterSetter.java的代码: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
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);