java - 在 Firebase 数据库中添加新子项时应用程序崩溃

标签 java firebase firebase-realtime-database

Possible solution, but structure failure在我的应用程序中,我想从 Firebase 实时数据库检索一个列表,但当我在数据库中添加一些内容时,应用程序上的列表没有实现,它崩溃了。 ValueListener 有什么问题吗?

  mDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                for (DataSnapshot ds: dataSnapshot.getChildren()){

                    comment = ds.getValue(Comment.class);
                    list.add(comment.getCommentText().toString()+" -"+comment.getUser().toString());
                }

                listView.setAdapter(adapter);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.toString()' on a null object reference at world.cryneo.partytime.java.EventProfileActivity$1.onDataChange(EventProfileActivity.java:71)

应用程序崩溃并重新启动后,会显示数据库中的新评论。但首先它崩溃了。

这就是正在上传的内容。上传后应用程序崩溃,但重新启动应用程序后内容正常显示。那么为什么会崩溃呢?

 public void uploadComment(){

        String nextIndex = Long.toString(eventCommentsCounter+1);
        newComment = input_event_comment.getEditText().getText().toString();
        mDatabase = FirebaseDatabase.getInstance().getReference().child("Events").child(event_name).child("comments").child(nextIndex).child("user");
        mDatabase.setValue(userName);
        mDatabase = FirebaseDatabase.getInstance().getReference().child("Events").child(event_name).child("comments").child(nextIndex).child("commentText");
        mDatabase.setValue(newComment);
        finish();

        Intent eventIntent = new Intent(WriteCommentActivity.this, EventProfileActivity.class);
        eventIntent.putExtra("Event_Name", event_name);
        startActivity(eventIntent);
        finish();

    }

最佳答案

似乎您一次向数据库添加一个值,因此当您添加“user”等值之一时,您的监听器会激活并构建一个不完整的 Comment 对象,该对象没有评论文本。

尝试先构建 POJO 并一次性上传所有Comment 数据,而不是按字段上传。

        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference index = database.getReference("Events").child(event_name).child("comments").child(nextIndex);

        index.push().setValue(new Comment(user, commentText));

关于java - 在 Firebase 数据库中添加新子项时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51657397/

相关文章:

java - 如何实现枚举类型的某些方法

java - Hibernate JPA hasOne 映射?

java - 将大的 2^63 十进制转换为二进制

ios - 查询 Firebase 嵌套数据以检查特定值 - iOS Swift

firebase - AngularFire2 通过子对象查询

java - Firebase 在类上找不到要序列化的属性

java - Robocode Enemy 类 setDirection() 调用

angular - 尝试使用 request.path 设置 Cloud Firestore 安全规则

android - 限制 Firestore gmail 登录到特定域

java - 参数 'pathString' 为空