【问题标题】:Exception when trying to send a message to firebase server尝试向 Firebase 服务器发送消息时出现异常
【发布时间】:2018-05-12 08:07:31
【问题描述】:

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

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.invokeNative(Native Method) 在 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 实例失败

【问题讨论】:

  • 第14行写了什么?
  • 公共类 NewMessageActivity 扩展 AppCompatActivity {
  • 你连接到firebase了吗?
  • 是的。我可以很好地登录。

标签: java android firebase firebase-realtime-database


【解决方案1】:

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

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

【讨论】:

  • 不错的收获,+1!
  • 谢谢。我按照您的建议更改了代码,但问题仍然存在。 :(
  • @Mohsen:检查您的activity_new_message 布局以确认EditText 上的ID 是newMessageText
  • @Bob 谢谢。我查了一下,好像没有问题。 ID 确实是“newMessageText”。
  • @Mohsen:添加我的更新中显示的检查,运行并查看 logcat 输出以查看 nNewMessageField 是否为空。如果是,则布局中的小部件 ID 仍有问题,或者您正在查看错误的布局文件。
猜你喜欢
  • 2021-05-23
  • 2012-12-16
  • 2019-02-09
  • 1970-01-01
  • 2017-12-06
  • 2017-01-19
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多