Java 未找到设置器/字段
大家好,我试着从Firebase数据集中检索数据,我不断地得到这个错误,即使我尝试了StackOverflow的每一个解决方案,以及我在Google上找到的东西,但没有任何好处 下面我将链接活动、类和数据集 我是Android新手,我不明白为什么它不起作用,因为有些人解决了这个问题,而我做了同样的事情,但什么都没起作用 先谢谢你 代码活动Java 未找到设置器/字段,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,大家好,我试着从Firebase数据集中检索数据,我不断地得到这个错误,即使我尝试了StackOverflow的每一个解决方案,以及我在Google上找到的东西,但没有任何好处 下面我将链接活动、类和数据集 我是Android新手,我不明白为什么它不起作用,因为有些人解决了这个问题,而我做了同样的事情,但什么都没起作用 先谢谢你 代码活动 package com.example.ipill; import androidx.appcompat.app.AppCompatActivity; im
package com.example.ipill;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;
import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.GenericTypeIndicator;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class FirebaseSearch extends AppCompatActivity {
private EditText mSearchField;
private ImageButton mSearchBtn;
private RecyclerView mResultList;
private DatabaseReference mUserDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_firebasesearch);
mUserDatabase = FirebaseDatabase.getInstance().getReference("Users");
mSearchField = (EditText) findViewById(R.id.search_field);
mSearchBtn = findViewById(R.id.search_btn);
mResultList = (RecyclerView)findViewById(R.id.result_list);
mResultList.setHasFixedSize(true);
mResultList.setLayoutManager(new LinearLayoutManager(this));
mSearchBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String searchText = mSearchField.getText().toString();
firebaseUserSearch(searchText);
}
});
}
private void firebaseUserSearch(String searchText) {
Toast.makeText(FirebaseSearch.this, "Started Search", Toast.LENGTH_LONG).show();
Query firebaseSearchQuery = mUserDatabase.orderByChild("Name").startAt(searchText).endAt(searchText + "\uf8ff");
FirebaseRecyclerAdapter<Users, UsersViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Users, UsersViewHolder>(
Users.class,
R.layout.list_layout,
UsersViewHolder.class,
firebaseSearchQuery
) {
@Override
protected void populateViewHolder(UsersViewHolder viewHolder, Users model, int position) {
viewHolder.setDetails(model.getName(), model.getSurname());
}
};
mResultList.setAdapter(firebaseRecyclerAdapter);
}
// View Holder Class
public static class UsersViewHolder extends RecyclerView.ViewHolder {
View mView;
public UsersViewHolder(View itemView) {
super(itemView);
mView = itemView;
}
public void setDetails(String name, String surname) {
TextView user_name = (TextView) mView.findViewById(R.id.name_text);
TextView user_surname = (TextView) mView.findViewById(R.id.status_text);
user_name.setText(name);
user_surname.setText(surname);
}
}
}
我的问题是:
在com.example.ipill.Users类中找不到姓氏的setter/字段(字段/setter为大小写
敏感!)
在com.example.ipill.Users类上找不到名称的setter/字段(字段/setter区分大小写!)
模型类
package com.example.ipill;
public class Users {
public String name, surname;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public Users(String name, String surname, String status) {
this.name = name;
this.surname = surname;
}
public Users(){
}
}
在此处输入代码要将POJO类映射到数据库,它需要具有相同的变量名,并且实例变量区分大小写。问题是,在数据库中,
Name
和姓氏
带有大写字母,而在POJO类中,它们带有小写字母
因此,您需要将数据库更改为以下内容:
{
"Users" : {
"01" : {
"name" : "Alex",
"surname" : "Kyto"
}
}
}
更改您的
用户
属性,如下所示,以与Firebase匹配。您的数据库和POJO应该对齐以使用
public String Name, Surname; //Capitalize each property
我得到这个错误是因为我访问了错误的变量(父变量)
希望有帮助。谢谢。我不知道它是区分大小写的,谢谢。我不知道它是区分大小写的。
public String Name, Surname; //Capitalize each property
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot dataSnapshot : snapshot.getChildren()){
list.add(snapshot.getValue(CategoryModel.class));
// Here in list I should have added dataSnapshot.getValue(CategoryModel.class)
}
}