Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 写入firebase时出错。应用程序不断崩溃_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 写入firebase时出错。应用程序不断崩溃

Java 写入firebase时出错。应用程序不断崩溃,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,所以,我对android和firebase还不熟悉。我正在尝试创建一个消息传递应用程序。但只要我点击发送按钮,我的应用程序就会崩溃。我确切地知道应用程序在哪里崩溃。当我点击发送按钮试图将数据放入数据库时,它就崩溃了。检查了Logcat,但一切都还不知道如何修复它。以下是MainActivity.java的代码 导入com.google.firebase.database.DatabaseReference; 导入com.google.firebase.database.FirebaseDatab

所以,我对android和firebase还不熟悉。我正在尝试创建一个消息传递应用程序。但只要我点击发送按钮,我的应用程序就会崩溃。我确切地知道应用程序在哪里崩溃。当我点击发送按钮试图将数据放入数据库时,它就崩溃了。检查了Logcat,但一切都还不知道如何修复它。以下是MainActivity.java的代码

导入com.google.firebase.database.DatabaseReference; 导入com.google.firebase.database.FirebaseDatabase

公共类MainActivity扩展了AppCompatActivity{

private Button sendButton;
private TextView editMessage;
private ListView messageList;

private FirebaseDatabase firebaseDatabase;
private DatabaseReference qDatabaseReference;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    try {
        firebaseDatabase = FirebaseDatabase.getInstance();
        qDatabaseReference = qDatabaseReference.getRef().child("messages");
    }catch(Exception e){
        Toast.makeText(this,"Database Error!", Toast.LENGTH_SHORT);
        e.printStackTrace();
    }

    sendButton = findViewById(R.id.sendButton);
    editMessage = findViewById(R.id.messageEdit);
    messageList = findViewById(R.id.messageList);

    sendButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Message message = new Message("user","TEST");
            //app crashes here at the line below
            qDatabaseReference.push().setValue(message);
            editMessage.setText("");
        }
    });
}
}
我的消息类的代码

public class Message {

private int maxLength = 1000;

private String name;
private String text;

Message(){
    name = null;
    text = null;
}

Message(String name, String message){
    this.name = name;
    this.text = message;
}
}
终于在LogCat中找到了错误

java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.firebase.database.DatabaseReference com.google.firebase.database.DatabaseReference.push()' on a null object reference
    at com.codeswingstudios.codewise.MainActivity$1.onClick(MainActivity.java:42)
    at android.view.View.performClick(View.java:5293)
    at android.view.View$PerformClick.run(View.java:21660)
    at android.os.Handler.handleCallback(Handler.java:815)
    at android.os.Handler.dispatchMessage(Handler.java:104)
    at android.os.Looper.loop(Looper.java:227)
    at android.app.ActivityThread.main(ActivityThread.java:6100)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:859)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)

尝试如下方式初始化数据库引用:

DatabaseReference qDatabaseReference = FirebaseDatabase.getInstance().getReference().child("messages");

移除引用初始化周围的try-and-Catch块,您正在尝试获取引用上的引用。将
qDatabaseReference.getReference()
替换为
firebaseDatabase.getReference()


希望它有帮助

你能发布logcat吗?发布logcat会有点困难,因为我使用物理设备来测试我的应用程序,所以你知道那里发生了很多事情。没有这些,很难说你做错了什么。如果你现在能帮上忙的话,最后在logcat中发现了错误。你在这里得到的是空指针。我很高兴。QDatabaseReferenceence=qDatabaseReference.getRef().child(“消息”);因此请尝试检查此变量以查看是否获得了有效的对象!guess最终找到了错误。在qDatabaseReference=qDatabaseReference.getRef().child(“消息”)中;我从引用变量本身而不是firebaseDatabase获取引用。感谢您的帮助。很抱歉,我无法获取,因为repo较低。
   firebaseDatabase = FirebaseDatabase.getInstance();
   qDatabaseReference = firebaseDatabase.getReference().child("messages");