使用 firebaseRecyclerAdapter 时出现静态上下文错误
Static context error when using firebaseRecyclerAdapter
不能从非静态上下文中引用非静态方法。问题来自我的 PersonHolder.setPerson(person),setPerson 带有下划线。这是因为 setPerson 在我的 onCreate 中吗?
我有 3 个 class 和 4 个 activity_layouts。
- 我的 activity_main class 只是用于菜单 activity_main - 只是一个
菜单
- 人class
- ReadFirebase class 附加到我的 activity_read_firebase 这是
意味着从 firebase 中提取数据并将其放入我的回收器中。
- WriteToFirebase class 用于将数据发送到 firebase。
最后一个 activity 是我的 firebase_item_file,它包含我的 activity_write_to_firebase 中回收商需要的物品。
public class ReadFirebase extends AppCompatActivity {
private FirebaseRecyclerAdapter<Player, PersonHolder> firebaseRecyclerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_read_firebase);
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
DatabaseReference roofRef = FirebaseDatabase.getInstance().getReference();
Query query = roofRef.child("adult").child("male");
FirebaseRecyclerOptions<Person> firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<Person>()
.setQuery(query, Person.class)
.build();
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Person, PersonHolder>(firebaseRecyclerOptions) {
@Override
protected void onBindViewHolder(@NonNull PersonHolder personHolder, int i, @NonNull Person person) {
PersonHolder.setPerson(person);
}
@NonNull
@Override
public PersonHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.firebase_item_file, parent, false);
return new PersonHolder(view);
}
};
recyclerView.setAdapter(firebaseRecyclerAdapter);
}
private class PersonHolder extends RecyclerView.ViewHolder {
private TextView name1;
private TextView name2;
private TextView name3;
private TextView age1;
private TextView age2;
private TextView age3;
PersonHolder(View itemView){
super(itemView);
pNameOne = itemView.findViewById(R.id.name1);
pNameTwo = itemView.findViewById(R.id.name2);
pNameThree = itemView.findViewById(R.id.name3);
pAgeOne = itemView.findViewById(R.id.age1);
pAgeTwo = itemView.findViewById(R.id.age2);
pAgeThree = itemView.findViewById(R.id.age3);
}
void setPerson(Person person){
String pName1 = person.getName();
pNameOne.setText(playerName1);
String pName2 = person.getName();
pNameTwo.setText(playerName2);
String pName3= person.getName();
pNameThree.setText(playerName3);
int pAge1= person.getAge();
pAgeOne.setText(Integer.toString(personAge1));
int pAge2 = person.getAge();
pAgeTwo.setText(Integer.toString(personAge2));
int pAge3 = person.getAge();
pAgeThree.setText(Integer.toString(personAge3));
}
}
Non-static method cannot be referenced from a non-static context.
您正在尝试使用 onBindViewHolder
中的 class PersonHolder
访问方法 setPerson
您应该使用在 onBindViewHolder
中获得的 PersonHolder
实例作为参数
@Override
protected void onBindViewHolder(@NonNull PersonHolder personHolder, int i, @NonNull Person person) {
personHolder.setPerson(person);
}
不能从非静态上下文中引用非静态方法。问题来自我的 PersonHolder.setPerson(person),setPerson 带有下划线。这是因为 setPerson 在我的 onCreate 中吗?
我有 3 个 class 和 4 个 activity_layouts。
- 我的 activity_main class 只是用于菜单 activity_main - 只是一个 菜单
- 人class
- ReadFirebase class 附加到我的 activity_read_firebase 这是 意味着从 firebase 中提取数据并将其放入我的回收器中。
- WriteToFirebase class 用于将数据发送到 firebase。
最后一个 activity 是我的 firebase_item_file,它包含我的 activity_write_to_firebase 中回收商需要的物品。
public class ReadFirebase extends AppCompatActivity {
private FirebaseRecyclerAdapter<Player, PersonHolder> firebaseRecyclerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_read_firebase);
RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
DatabaseReference roofRef = FirebaseDatabase.getInstance().getReference();
Query query = roofRef.child("adult").child("male");
FirebaseRecyclerOptions<Person> firebaseRecyclerOptions = new FirebaseRecyclerOptions.Builder<Person>()
.setQuery(query, Person.class)
.build();
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Person, PersonHolder>(firebaseRecyclerOptions) {
@Override
protected void onBindViewHolder(@NonNull PersonHolder personHolder, int i, @NonNull Person person) {
PersonHolder.setPerson(person);
}
@NonNull
@Override
public PersonHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.firebase_item_file, parent, false);
return new PersonHolder(view);
}
};
recyclerView.setAdapter(firebaseRecyclerAdapter);
}
private class PersonHolder extends RecyclerView.ViewHolder {
private TextView name1;
private TextView name2;
private TextView name3;
private TextView age1;
private TextView age2;
private TextView age3;
PersonHolder(View itemView){
super(itemView);
pNameOne = itemView.findViewById(R.id.name1);
pNameTwo = itemView.findViewById(R.id.name2);
pNameThree = itemView.findViewById(R.id.name3);
pAgeOne = itemView.findViewById(R.id.age1);
pAgeTwo = itemView.findViewById(R.id.age2);
pAgeThree = itemView.findViewById(R.id.age3);
}
void setPerson(Person person){
String pName1 = person.getName();
pNameOne.setText(playerName1);
String pName2 = person.getName();
pNameTwo.setText(playerName2);
String pName3= person.getName();
pNameThree.setText(playerName3);
int pAge1= person.getAge();
pAgeOne.setText(Integer.toString(personAge1));
int pAge2 = person.getAge();
pAgeTwo.setText(Integer.toString(personAge2));
int pAge3 = person.getAge();
pAgeThree.setText(Integer.toString(personAge3));
}
}
Non-static method cannot be referenced from a non-static context.
您正在尝试使用 onBindViewHolder
PersonHolder
访问方法 setPerson
您应该使用在 onBindViewHolder
中获得的 PersonHolder
实例作为参数
@Override
protected void onBindViewHolder(@NonNull PersonHolder personHolder, int i, @NonNull Person person) {
personHolder.setPerson(person);
}