Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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,你能找出这个代码有什么问题吗 public class NewMessageActivity extends AppCompatActivity { private DatabaseReference mDatabaseReference; String mDisplayName = "John"; EditText mNewMessageField; @Override protected void onCreate(Bundle savedInstanceState) { su

你能找出这个代码有什么问题吗

public class NewMessageActivity extends AppCompatActivity {

private DatabaseReference mDatabaseReference;
String mDisplayName = "John";
EditText mNewMessageField;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    final EditText mNewMessageField = (EditText) findViewById(R.id.newMessageText);
    setContentView(R.layout.activity_new_message);
    ImageButton mSendButton = (ImageButton) findViewById(R.id.sendButton);
    mSendButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            sendMessage();
            finish();
        }
    });
}

private void sendMessage(){
    mDatabaseReference= FirebaseDatabase.getInstance().getReference();
    String input = mNewMessageField.getText().toString();
    SingleMessage singleMessage = new SingleMessage(input, mDisplayName);
    mDatabaseReference.child("messages").push().setValue(singleMessage);
}
}

我按下发送按钮后,应用程序立即停止工作,并收到以下错误消息:

致命异常:主 java.lang.NullPointerException 在com.NewMessageActivity.sendMessage(NewMessageActivity.java:42) 在com..NewMessageActivity.access$000(NewMessageActivity.java:14) 在com.*.NewMessageActivity$1.onClick(NewMessageActivity.java:33) 在android.view.view.performClick上(view.java:4209) 在android.view.view$PerformClick.run(view.java:17457) 位于android.os.Handler.handleCallback(Handler.java:725) 位于android.os.Handler.dispatchMessage(Handler.java:92) 位于android.os.Looper.loop(Looper.java:153) 位于android.app.ActivityThread.main(ActivityThread.java:5341) 位于java.lang.reflect.Method.Invokenactive(本机方法) 位于java.lang.reflect.Method.invoke(Method.java:511) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:929)上 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 在dalvik.system.NativeStart.main(本机方法) 11-28 20:05:51.566 508-527/? E/AppErrorDialog:无法获取ILowStorageHandle实例


在搜索
EditText
小部件之前,需要调用
setContentView(
。您还必须使用在包级别声明的
mNewMessageField
实例。不要在
onCreate()
中声明新实例


接得好,+1!谢谢我按照您的建议更改了代码,但问题仍然存在:(@Mohsen:Check your
activity\u new_message
布局,确认
EditText
上的ID是
newMessageText
。@Bob谢谢。我检查过了,似乎没有问题。ID确实是“newMessageText”@Mohsen:添加我的更新中显示的检查,运行并查看logcat输出,以查看
nNewMessageField
是否为空。如果为空,则说明布局中的小部件ID仍然存在问题,或者您查看的布局文件错误。第14行写了什么?公共类NewMessageActivity扩展了AppCompatActivity{你连接到firebase了吗?是的。我可以很好地登录。
setContentView(R.layout.activity_new_message);
mNewMessageField = (EditText) findViewById(R.id.newMessageText);  // <= CHANGED
if (mNewMessageField == null) {
    System.out.println("mNewMessageField is NULL");
}
private void sendMessage(){
    mDatabaseReference= FirebaseDatabase.getInstance().getReference();
    if (mNewMessageField == null) {
        System.out.println("mNewMessageField is NULL");
    }
    Editable ed = mNewMessageField.getText();

    if (ed == null) {
        System.out.println("Editable is NULL");
    }
    String input = mNewMessageField.getText().toString();
    System.out.println("input=" + input);

    SingleMessage singleMessage = new SingleMessage(input, mDisplayName);
    mDatabaseReference.child("messages").push().setValue(singleMessage);
}