我将Firebase用作后端系统,并且还将Recycler View用于向用户显示数据。但是,当从数据库中获取数据时,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;
}
}
我的数据库:
logcat:
任何人都可以找到解决方案吗?
答案 0 :(得分:0)
您永远不会初始化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() {