, поэтому я написал этот код, который читает элемент из моей базы данных и записывает информацию в различные текстовые представления. Теперь я хочу удалить элемент, на который ссылается «результат», из базы данных после его ввода в текстовые представления.
обратите внимание на, что весь этот код работает по назначению, однако после того, как текстовые представления заполнены данными, и элемент удаляется из базы данных, приложение останавливается (сбой).Как удалить элемент из базы данных firebase без моего отключения приложения
DatabaseReference newRef = FirebaseDatabase.getInstance().getReference("messages").child(result);
newRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
Log.e("Count", "" + dataSnapshot.getChildren());
String User = (String) d ataSnapshot.child("name").getValue();
String TheMessage = (String) dataSnapshot.child("message").getValue();
String Email = (String) dataSnapshot.child("email").getValue();
//check for email match
FirebaseUser curuser = FirebaseAuth.getInstance().getCurrentUser();
if (!Email.equals(curuser.getEmail())) {
//i try to remove the value here
myRef.child(result).removeValue();
message.setText(themessage);
from.setText("from");
user.setText(User);
}
}
}
@Override
public void onCancelled (DatabaseError databaseError){
Log.e(TAG, "The read failed");
}
Я сделал обширные исследования в области, почему это происходит и на других потоков он рекомендует добавить если (datasnapshot.exsists()) {// мой код} тогда было бы остановить мое приложение но это не сработало.
мое сообщение об ошибке:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.fujdevelopers.bottled, PID: 7274
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
at com.fujdevelopers.bottled.readMsg$1.onDataChange(readMsg.java:52)
at com.google.android.gms.internal.zzbpx.zza(Unknown Source)
at com.google.android.gms.internal.zzbqx.zzZS(Unknown Source)
at com.google.android.gms.internal.zzbra$1.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
, если я беру строку:
myRef.child(result).removeValue();
то все работает без сбоев, но если я оставить его в ней все работы, но сбои.
Если кто-нибудь может мне помочь, я бы очень признателен.
EDIT: Я знаю, что такое нулевой указатель, и я понимаю, почему они происходят. Я просто не понимаю, почему у меня есть один в этом контексте. (Im new для баз данных firebase).
также
ссылка базы данных показано в моем коде
DatabaseReference newRef = FirebaseDatabase.getInstance().getReference("messages").child(result);
однако удаление использует ссылку «myRef», который этот
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference("messages");
Я не могу понять, почему после всего кода выполнен, я получаю нулевой указатель и сбой моей программы
EDIT Я установил его, я добавил прослушиватель событий удаления.
дубликат [Что такое исключение NullPointerException и как его исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix- это) – petey