在Firebase数据库上添加新子级后,应用程序崩溃

时间:2018-08-02 15:32:46

标签: 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:尝试调用虚拟方法   空对象上的'java.lang.String java.lang.String.toString()'   参考           在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();

    }

1 个答案:

答案 0 :(得分:0)

似乎您一次要向数据库中添加一个值,因此,当您添加诸如“ user”之类的值之一时,侦听器将激活并构建一个不带有commentText的不完整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));