Android dataSnapShot.getValue()在数据库中存在数据时返回null event
我使用Firebase作为后端系统,还使用Recycler视图向用户显示数据。但是当从数据库获取数据时,Android dataSnapShot.getValue()在数据库中存在数据时返回null event,android,firebase-realtime-database,android-recyclerview,android-adapter,Android,Firebase Realtime Database,Android Recyclerview,Android Adapter,我使用Firebase作为后端系统,还使用Recycler视图向用户显示数据。但是当从数据库获取数据时,getValue()方法返回null。 我已在下面附上我的代码: public class Post { private String desc; private String image; public Post() {} public Post(String desc,String image) { this.image
getValue()
方法返回null
。
我已在下面附上我的代码:
public class Post {
private String desc;
private String image;
public Post()
{}
public Post(String desc,String image)
{
this.image= image;
this.desc = desc;
}
public String getDescription()
{
return desc;
}
public String getImage(){
return image;
}
}
MainActivity的代码:
public class fragment2Activity extends Fragment {
private RecyclerView recyclerView;
private RecyclerView.Adapter madapter;
private RecyclerView.LayoutManager layoutManager;
private View view;
private ArrayList<Post> postArrayList;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment2, container, false);
final DatabaseReference mref= FirebaseDatabase.getInstance().getReference().child("Post");
recyclerView = (RecyclerView)view.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
mref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
for (DataSnapshot childSnapShot : dataSnapshot.getChildren()) {
Post p = childSnapShot.getValue(Post.class);
postArrayList.add(p);
}
madapter = new MyAdapter(postArrayList);
recyclerView.setAdapter(madapter);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
return view;
}
}
公共类fragment2Activity扩展了片段{
私人回收站;
专用回收器查看适配器madapter;
private RecyclerView.LayoutManager LayoutManager;
私人视野;
私人ArrayList postArrayList;
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment2,容器,假);
final DatabaseReference mref=FirebaseDatabase.getInstance().getReference().child(“Post”);
recyclerView=(recyclerView)view.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
layoutManager=新的LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
mref.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
if(dataSnapshot.exists()){
对于(DataSnapshot childSnapShot:DataSnapshot.getChildren()){
Post p=childSnapShot.getValue(Post.class);
后列表添加(p);
}
madapter=新的MyAdapter(postArrayList);
recyclerView.setAdapter(madapter);
}
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
}
});
返回视图;
}
}
我的数据库:
日志:
有人能找到解决方案吗?您从未初始化
postArrayList
,因此postArrayList.add(p)代码>正在导致NullPointerException
解决方案是创建postArrayList
,通常在onCreate
中:
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment2, container, false);
final DatabaseReference mref= FirebaseDatabase.getInstance().getReference().child("Post");
recyclerView = (RecyclerView)view.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
postArrayList = new ArrayList<Post>(); // <-- this is new
mref.addListenerForSingleValueEvent(new ValueEventListener() {
public View onCreateView(@NonNull LayoutInflater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment2,容器,假);
final DatabaseReference mref=FirebaseDatabase.getInstance().getReference().child(“Post”);
recyclerView=(recyclerView)view.findViewById(R.id.recyclerView);
recyclerView.setHasFixedSize(true);
layoutManager=新的LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
postArrayList=新ArrayList()//