web-dev-qa-db-fra.com

Android comment supprimer la valeur de la base de données firebase?

c'est mon premier projet dans firebase. J'essaie de supprimer la valeur de Firebase, mais chaque fois que j'essaie de supprimer de la valeur de Firebase, mon application se bloque. Je ne comprends pas comment résoudre cette erreur

Service.class

public class NotiListener extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    //When the service is started
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        //Opening sharedpreferences
        SharedPreferences sharedPreferences = getSharedPreferences(Constant.SHARED_PREF, MODE_PRIVATE);

        //Getting the firebase id from sharedpreferences
        String id = sharedPreferences.getString(Constant.UNIQUE_ID, null);

        //Creating a firebase object
        Firebase firebase = new Firebase(Constant.FIREBASE_APP + id);

        //Adding a valueevent listener to firebase
        //this will help us to  track the value changes on firebase
        firebase.addValueEventListener(new ValueEventListener() {

            //This method is called whenever we change the value in firebase
            @Override
            public void onDataChange(DataSnapshot snapshot) {
                  if(snapshot.child("msg") != null){
                String msg = snapshot.child("msg").getValue().toString();


                if (msg.equals("none"))
                    return;


                showNotification(msg);
            } else{
                Log.e("Value-->","Null");
            }

            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {
                Log.e("The read failed: ", firebaseError.getMessage());
            }
        });

        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        Toast.makeText(this, "MyService Stopped", Toast.LENGTH_LONG).show();
    }

    private void showNotification(String msg){
        //Creating a notification
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setSmallIcon(R.mipmap.ic_launcher);
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com"));
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
        builder.setContentIntent(pendingIntent);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
        builder.setContentTitle("Firebase Push Notification");
        builder.setContentText(msg);
        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        notificationManager.notify(1, builder.build());
    }
}

Le code pour supprimer la valeur est:

Firebase firebase=new Firebase(Constant.FIREBASE_APP+id);
                    firebase.orderByChild(id).equalTo(id).addListenerForSingleValueEvent(
                            new ValueEventListener() {
                                @Override
                                public void onDataChange(DataSnapshot dataSnapshot) {
                                     dataSnapshot.getRef().removeValue();

                                }

                                @Override
                                public void onCancelled(FirebaseError firebaseError) {

                                }
                             });

Bûche:

10-21 17:46:17.384 30986-30986/com.example.pitech09.bizfriend E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                Process: com.example.pitech09.bizfriend, PID: 30986
                                                                                Java.lang.NullPointerException: Attempt to invoke virtual method 'Java.lang.String Java.lang.Object.toString()' on a null object reference
                                                                                    at com.example.pitech09.bizfriend.NotiListener$1.onDataChange(NotiListener.Java:52)
                                                                                    at com.firebase.client.core.ValueEventRegistration.fireEvent(ValueEventRegistration.Java:56)
                                                                                    at com.firebase.client.core.view.DataEvent.fire(DataEvent.Java:45)
                                                                                    at com.firebase.client.core.view.EventRaiser$1.run(EventRaiser.Java:38)
                                                                                    at Android.os.Handler.handleCallback(Handler.Java:739)
                                                                                    at Android.os.Handler.dispatchMessage(Handler.Java:95)
                                                                                    at Android.os.Looper.loop(Looper.Java:135)
                                                                                    at Android.app.ActivityThread.main(ActivityThread.Java:5343)
                                                                                    at Java.lang.reflect.Method.invoke(Native Method)
                                                                                    at Java.lang.reflect.Method.invoke(Method.Java:372)
                                                                                    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:905)
                                                                                    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:700)
4
Satish Lodhi

dataSnapshot.getRef().setValue(null); n'est pas la bonne façon de supprimer votre objet Firebase. Vous n'êtes pas autorisé à enregistrer une valeur null dans votre base de données. Pour l'enlever, vous utilisez:

dataSnapshot.getRef().removeValue();

Vous devriez également vérifier si la valeur n'est pas nulle, car vous allez supprimer cet objet.

if(snapshot.child("msg").getValue() != null){
   String msg = snapshot.child("msg").getValue().toString();
   return;
}
6
Ab_

Lorsque vous supprimez une valeur, il existe une NullPointerException lorsque vous essayez de récupérer la valeur dans la ValueEventListener

Cette ligne:

String msg = snapshot.child("msg").getValue().toString();

Vous devriez vérifier si (snapshot != null && snapshot.child("msg").getValue() != null befure vous obtenez la valeur.

0
T.S

En fait, si vous voyez l'implémentation de removeValue () de firebase, cela revient à définir la valeur à null. 

public Task<Void> removeValue() {
        return this.setValue((Object)null);
    }

Définissez donc la valeur sur null ou utilisez la fonction removeValue () identique.

0
Sibasish

bonjour @Satish Lodhi, il vous suffit de passer la clé de l’article que vous retirez de Firebase et de mettre cette ligne.

rootRef.child(clickedKey).removeValue();
0
Sachin Suthar