如何解决使用带有Firebase数据库的微调器过滤RecylerView
我想使用微调器的选定选项来过滤recylerView 我的微调器是从数据库中检索的。...检索部分效果很好。 当我将RecylerView代码放入Onitemselectedlisner内时,发生错误 在onstart函数pa1.startlistening()上说“空引用”。 当我将recylerView代码放在ONitemselectedlistener之外时,它在该位置显示错误”。setQuery(FirebaseDatabase.getInstance()。getReference()。child(“ Date Wise”)。child(item1).child(us),post .class)“说“不能将空值添加为子级”
我的程序 '''
package com.example.myapplication;
import androidx.annotation.NonNull;
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.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import com.firebase.ui.database.FirebaseRecyclerOptions;
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.ValueEventListener;
import java.util.ArrayList;
public class datewise extends AppCompatActivity implements AdapterView.OnItemSelectedListener {
Spinner sp1;
ArrayAdapter<String> adapter;
ArrayList<String> Spinnerlists;
DatabaseReference dr1,db1;
ValueEventListener ve;
String it;
private postadapter pa1;
String User = "hissham@hpcl.in";
String us = User.replace("@hpcl.in","hpcl");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_datewise);
sp1= findViewById(R.id.spinnerdt);
Spinnerlists = new ArrayList<>();
adapter = new ArrayAdapter<>(datewise.this,android.R.layout.simple_spinner_dropdown_item,Spinnerlists);
sp1.setAdapter(adapter);
retrive();
sp1.setonItemSelectedListener(this);
// it = sp1.getSelectedItem().toString().trim();
RecyclerView rv1 = findViewById(R.id.recyclerdt);
rv1.setLayoutManager(new linearlayoutmanager(this));
FirebaseRecyclerOptions<post> options =
new FirebaseRecyclerOptions.Builder<post>()
.setQuery(db1,post.class)
.build();
pa1 = new postadapter(options);
rv1.setAdapter(pa1);
}
@Override
protected void onStart() {
super.onStart();
pa1.startListening();
}
@Override
protected void onStop() {
super.onStop();
pa1.stopListening();
}
private void retrive() {
dr1=FirebaseDatabase.getInstance().getReference().child("Date Wise");
ve = dr1.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for(DataSnapshot item:snapshot.getChildren()){
Spinnerlists.add(item.getKey().trim());
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
@Override
public void onItemSelected(AdapterView<?> parent,View view,int position,long id) {
it=parent.getSelectedItem().toString().trim();
db1 = FirebaseDatabase.getInstance().getReference().child("Date Wise").child(it).child(us);
}
@Override
public void onnothingSelected(AdapterView<?> parent) {
}
}
解决方法
解决方案很简单,只需删除onStart和onStop即可 “ .setLifecyleOwner”
FirebaseRecyclerOptions<post> options =
new FirebaseRecyclerOptions.Builder<post>()
.setQuery(FirebaseDatabase.getInstance().getReference().child("Date Wise").child(it).child(us),post.class)
.setLifecycleOwner(datewise.this)
.build();
pa1 = new postadapter(options);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。