Java Android Firebase-卡未显示在RecyclerView和NullPointerException中

Java Android Firebase-卡未显示在RecyclerView和NullPointerException中,java,android,firebase,android-recyclerview,Java,Android,Firebase,Android Recyclerview,我正在尝试构建一个应用程序,用户可以在其中发布带有图像和描述的内容,这些内容分别包含在cardwiew的RecyclerView中。所以我有三个问题 1.当id(userId)用作子项,然后我发布数据时,它会被替换为旧数据,而不是添加新数据(如果发布有多个具有相同id的子项,则我的卡应该显示,但每次都会被替换id) 添加帖子时不会显示卡片。(当有帖子时) Firebase数据库) 如果默认情况下Firebase数据库中没有帖子 生成方法getDesc()的NullPointerException

我正在尝试构建一个应用程序,用户可以在其中发布带有图像和描述的内容,这些内容分别包含在
cardwiew
RecyclerView
中。所以我有三个问题

1.当
id(userId)
用作子项,然后我发布数据时,它会被替换为旧数据,而不是添加新数据(如果发布有多个具有相同id的子项,则我的卡应该显示,但每次都会被替换id)

  • 添加帖子时不会显示卡片。(当有帖子时) Firebase数据库)
  • 如果默认情况下Firebase数据库中没有帖子 生成方法
    getDesc()
    NullPointerException
    虽然我已经把空支票
  • 先前我用来存储帖子的子对象是
    id(userId)
    ,但是帖子被替换了,而不是添加了一个新的帖子,所以我使用了一个随机字符串生成器,并尝试从中获取信息

    HomeFragment.java

    
    公共类HomeFragment扩展了片段{
    私人回收车;
    私有文本视图用户名、日期、描述;
    私人CircleImageView PostImages;
    私有ImageView postBigImage;
    私人卡景明信片;
    私人列表帖子;
    私人数据库参考dr;
    私人参考sr;
    私有FirebaseUser用户;
    //火基回收适配器fra;
    私人邮政适配器pa;
    公共HomeFragment(){
    //必需的空公共构造函数
    }
    @凌驾
    创建视图上的公共视图(布局、充气机、视图组容器、,
    Bundle savedInstanceState){
    //为该碎片膨胀布局
    视图=充气机。充气(R.layout.fragment\u home,container,false);
    sr=FirebaseStorage.getInstance().getReference();
    user=FirebaseAuth.getInstance().getCurrentUser();
    String id=user.getUid();
    AddPost ap=新的AddPost();
    dr=
    FirebaseDatabase.getInstance().getReference().child(“Posts”)
    .child(ap.getUni());
    positems=newarraylist();
    pa=新的后适配器(后项);
    rv=view.findViewById(R.id.rvPostItems);
    rv.setLayoutManager(新的LinearLayoutManager(getActivity());
    rv.设置适配器(pa);
    dr.addValueEventListener(新的ValueEventListener(){
    @凌驾
    public void onDataChange(@NonNull DataSnapshot DataSnapshot){
    对于(DataSnapshot ds:DataSnapshot.getChildren()){
    //add(ds.getValue(PostActivity.class));
    PostActivity pa=dataSnapshot.getValue(PostActivity.class);
    添加后项(pa);
    }
    }
    @凌驾
    已取消的公共void(@NonNull DatabaseError DatabaseError){
    }
    });
    返回视图;
    }
    FragmentInteractionListener上的公共接口{
    //TODO:更新参数类型和名称
    void onFragmentInteraction(Uri);
    }
    }
    
    PostAdapter.java

    package com.pappu5.navigation;
    导入android.support.annotation.NonNull;
    导入android.support.v7.widget.RecyclerView;
    导入android.view.LayoutInflater;
    导入android.view.view;
    导入android.view.ViewGroup;
    导入android.widget.TextView;
    导入java.util.List;
    公共类PostAdapter扩展了RecyclerView.Adapter{
    公开名单公告;
    公共邮件适配器(列表邮件项){
    this.positems=positems;
    }
    @非空
    @凌驾
    public PostAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
    View=LayoutFlater.from(parent.getContext()).flate(R.layout.post_items,parent,false);
    返回新的ViewHolder(视图);
    }
    @凌驾
    BindViewHolder上的公共无效(@NonNull final PostAdapter.ViewHolder,int位置){
    字符串descTe=positems.get(position.getDesc();
    if(descTe!=null){
    保持器。设置描述(描述);
    }否则{
    String def=“这是空的”;
    保持架.设置描述(def);
    }
    }
    @凌驾
    public int getItemCount(){
    返回positems.size();
    }
    公共类ViewHolder扩展了RecyclerView.ViewHolder{
    私有文本视图描述;
    私有视图;
    公共视图持有者(视图项视图){
    超级(项目视图);
    mView=项目视图;
    }
    公共void setDesc(字符串descText){
    desc=mView.findviewbyd(R.id.postDesc);
    desc.setText(descText);
    }
    }
    }
    
    AddPost.java

    package com.pappu5.navigation;
    公共类AddPost扩展了AppCompatActivity{
    专用工具栏;
    私有图像查看后图像;
    私人按钮postButton;
    私人编辑文本postDesc;
    专用静态最终int画廊\u编号=1;
    私营部门;
    私有FirebaseUser用户;
    私人参考sr;
    私人数据库参考dr;
    私有Uri postImageUri=null;
    私人位图压缩器;
    字符串日期=新的SimpleDataFormat(“yyyy-MM-dd”,Locale.getDefault()).format(新日期());
    受保护的字符串getSaltString(){
    字符串SALTCHARS=“abcdefghijklmnopqrstuvxyz1234567890”;
    StringBuilder salt=新的StringBuilder();
    随机rnd=新随机();
    while(salt.length()<18){//随机字符串的长度。
    int index=(int)(rnd.nextFloat()*SALTCHARS.length());
    salt.append(SALTCHARS.charAt(索引));
    }
    字符串saltStr=salt.toString();
    返回saltStr;
    }
    String uni=getSaltString();
    公共字符串getUni(){
    归还这个.uni;
    }
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity\u add\u post);
    工具栏=findViewById
    
    @Override
    public void onBindViewHolder(@NonNull final PostAdapter.ViewHolder holder, int position) {
        if(postItems.get(position) != null) {
            String descTe = postItems.get(position).getDesc();
    
            holder.setDesc(descTe);
        } else {
            String def = "This is NULL";
            holder.setDesc(def);
        }
    }
    
    postItems = new ArrayList<>();
    pa = new PostAdapter(postItems);
    
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot ds : dataSnapshot.getChildren()){
    
                    //postItems.add(ds.getValue(PostActivity.class));
    
                    PostActivity pa =dataSnapshot.getValue(PostActivity.class);
                    postItems.add(pa);
    
                }
                pa.notifyDataSetChanged();
            }