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)
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();
}