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