2017-02-23 17 views
0

, поэтому я написал этот код, который читает элемент из моей базы данных и записывает информацию в различные текстовые представления. Теперь я хочу удалить элемент, на который ссылается «результат», из базы данных после его ввода в текстовые представления.
обратите внимание на, что весь этот код работает по назначению, однако после того, как текстовые представления заполнены данными, и элемент удаляется из базы данных, приложение останавливается (сбой).Как удалить элемент из базы данных 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 Я установил его, я добавил прослушиватель событий удаления.

+3

дубликат [Что такое исключение NullPointerException и как его исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix- это) – petey

ответ

0

Я бы хотел дать предложение, не знаю, поможет ли оно.

Согласно вашей заданной ошибке. Кажется, что вы пытаетесь получить данные из элемента, который был удален, и каким-то образом он получил NullPointerException.

Пожалуйста, попробуйте добавить слушатель FirebaseDatabase.getInstance().getReference("messages") вместо FirebaseDatabase.getInstance().getReference("messages").child(result) затем петель через dataSnapshot к элементу, который имеет ключ равно result затем проверить и выполнить удаление там.

+0

Я должен уточнить, если вы посмотрите на код newRef ссылается на ребенка.Но он удаляет из myRef, который ссылается на «сообщение», поэтому мой текущий код делает то, что вы говорите, он должен сделать, извините за то, что я не понял его в своем посте. –

+0

Я не видел никаких циклов в вашем 'onDataChange'. Но, похоже, вам удается решить вашу проблему. Congrats! –

+0

спасибо, было много проб и ошибок –

Смежные вопросы