2017-07-06 17 views
1

次の関数は、必要に応じてFirebaseデータベースから特定のノードを削除するaddChildEventListenerから呼び出されます。 ここでの問題は、関数が「Item removed」を起動することです。タスクが正常に実行されたことを示すが、ノードはデータベース上に存在し続ける。Android - Firebaseデータベースからノードを削除する際の問題

誰かが間違っていることを教えてもらえますか?

private void showData(DataSnapshot ds) { 
 
    String keyValue = null; 
 

 
    if(ds.hasChildren()) { 
 
     keyValue = ds.getKey(); 
 

 
     Toast.makeText(getActivity().getApplicationContext(), "Removing item...", Toast.LENGTH_SHORT).show(); 
 
     ds.getRef().child(keyValue).removeValue().addOnCompleteListener(new OnCompleteListener<Void>() { 
 
      @Override 
 
      public void onComplete(@NonNull Task<Void> task) { 
 
       if (task.isSuccessful()) { 
 
        Toast.makeText(getActivity().getApplicationContext(), "Item removed.", Toast.LENGTH_SHORT).show(); 
 
       } else { 
 
        Toast.makeText(getActivity().getApplicationContext(), "Something bad happened while removing item.", Toast.LENGTH_SHORT).show(); 
 
       } 
 
      } 
 
     }); 
 
    } 
 
}

EDIT ことができます場合は、私のクエリは以下の通りです:

orderItemsByTime = db.getInstance().getReference().child("items").orderByChild("time"); 
+0

あなたは 'とき' addOnCompleteListener') '.getRefを(削除しようとしたことがありますか? –

+0

それをしました。残念ながら、動作しませんでした。 –

答えて

0

可能性のある説明はds.getRef().child(keyValue)はあなたが意図した場所を指していないということです。存在しない場所でremove()を実行すると、エラーにはなりません。 task.isSuccessful()がtrueを返します。

ds.getRef().child(keyValue)のパスを表示するには、いくつかのデバッグログ(または乾杯)を追加します。

Toast.makeText(getActivity().getApplicationContext(), "Removing item at " + 
     ds.getRef().child(keyValue), Toast.LENGTH_SHORT).show(); 

または

Log.d(TAG, "Removing item at " + ds.getRef().child(keyValue)); 
+0

この問題を投稿した直後に提案したトーストをここに追加しました。削除したい特定のパスが表示されます。いくつかの他の提案? –

+0

@LavitzBr:パスは正しいですか?キーは2回表示されませんか?それはあなたが欲しいものですか?例:スナップショットへのパスが '/ test/post'の場合、キーは' post'で、削除のパスは '/ test/post/post'です。 –

+0

私が使用しているクエリは、orderItemsByTime = db.getInstance()。getReference()。child( "items")。orderByChild( "time")です。トーストは、削除したいアイテムのデータベースキーまでのパスを表示します。 Firebaseコンソール上のデータベースを歩いているときと同じパスです。 –

関連する問題