I would like to search Users from Firebase by their first name and display every user with identical first names in the RecyclerView along with their last name and sex.
I got the code from a youtube tutorial(https://www.youtube.com/watch?v=b_tz8kbFUsU) but the tutorial used an older version of FirebaseUI and I am using the 3.2.2 version.
I tried to update the older version code by whatever came to my mind but I don't know... so there are probably some errors due to that too here.
Gradle Build is successful. But I am not getting the list when I click the search button. And the logcat shows the error No adaper attached skipping layout when Search button is clicked.
Here is the activity code
private EditText SearchField;
private Button SearchButton;
private RecyclerView ResultList;
private DatabaseReference UserDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search_User);
UserDatabase = FirebaseDatabase.getInstance().getReference().child("Users");
SearchField = (EditText) findViewById(R.id.Name);
SearchButton = (Button) findViewById(R.id.Search);
ResultList = (RecyclerView) findViewById(R.id.result_list);
ResultList.setHasFixedSize(true);
ResultList.setLayoutManager(new LinearLayoutManager(this));
SearchButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String searchText = SearchField.getText().toString();
firebaseUserSearch(searchText);
}
});
}
private void firebaseUserSearch(String searchText){
super.onStart();
Toast.makeText(SearchUserActivity.this, "Started Search", Toast.LENGTH_LONG).show();
Query firebaseSearchQuery = UserDatabase.orderByChild("firstName").startAt(searchText).endAt(searchText + "\uf8ff");
FirebaseRecyclerOptions<Users> options = new FirebaseRecyclerOptions.Builder<Users>().setQuery(firebaseSearchQuery, Users.class).build();
FirebaseRecyclerAdapter firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Users, UsersViewHolder>(options) {
@Override
protected void onBindViewHolder(UsersViewHolder viewHolder, int position, Users model) {
viewHolder.setDetails(model.getFirstName(), model.getLastName(), model.getSex());
}
@Override
public UsersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.user_list, parent, false);
return new UsersViewHolder(view);
}
};
ResultList.setAdapter(firebaseRecyclerAdapter);
}
public static class UsersViewHolder extends RecyclerView.ViewHolder{
View view;
public UsersViewHolder(View itemView){
super(itemView);
view = itemView;
}
public void setDetails(String userfirstname, String userlastname, String userSex){
TextView user_firstname = (TextView) view.findViewById(R.id.textFirstName);
TextView user_lastname = (TextView) view.findViewById(R.id.textLastName);
TextView user_sex = (TextView) view.findViewById(R.id.textSex);
user_firstname.setText(userfirstname);
user_lastname.setText(userlastname);
user_sex.setText(userSex);
}
}
Here is the Users class code
public String firstName, lastName, Sex;
public void Intructors(){
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getSex() {
return Sex;
}
public void setSex(String sex) {
this.Sex = sex;
}
public Users(String firstName, String lastName, String sex) {
this.firstName = firstName;
this.lastName = lastName;
this.Sex = sex;
}
Here is the xml code for the User_list
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<TextView
android:id="@+id/textFirstName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="44dp"
android:layout_marginStart="44dp"
android:layout_marginTop="8dp"
android:text="Fist Name"
android:textAppearance="@style/TextAppearance.AppCompat.Display1" />
<TextView
android:id="@+id/textSex"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textFirstName"
android:layout_alignStart="@+id/textFirstName"
android:layout_below="@+id/textFirstName"
android:layout_marginTop="35dp"
android:text="Sex"
android:textAppearance="@style/TextAppearance.AppCompat.Display1" />
<TextView
android:id="@+id/textLastName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/textFirstName"
android:layout_marginLeft="43dp"
android:layout_marginStart="43dp"
android:layout_toEndOf="@+id/textFirstName"
android:layout_toRightOf="@+id/textFirstName"
android:text="Last Name"
android:textAppearance="@style/TextAppearance.AppCompat.Display1" />
</RelativeLayout>
This is what the activity xml looks like
https://i.stack.imgur.com/Q6tka.jpg
And finally here is my firebase database structure
https://i.stack.imgur.com/jeL01.jpg
Please help me find the error. I welcome every suggestion.