2016-06-19 2 views
3

Ich konnte keine eindeutige Antwort finden, die mir half, einen Knoten zu löschen, der als POJO hinzugefügt wurde, und dann einen Schlüssel durch Push (). Alles, was ich versuche, ist ein bestimmtes Element zu löschen, wenn es lange auf einer Listenansicht gedrückt wird. Ich habe versucht, removeValue(), aber alles, was tut, ist auch den gesamten Elternknoten zu löschen, was nicht das ist, was ich wollte. Ich weiß nicht, wie ich den generierten Schlüssel bekomme.Löschen eines einzelnen Elements in der Firebase-Datenbank mit Android Generiert mit Push()

Könnten Sie ein Beispiel für das Erhalten einer Referenz say/node/angeben, so dass ich .removeValue() darauf in einem Listenansicht verwenden kann. Mein Problem ist, ich versuche, den richtigen gedrückten Schlüssel in der Liste zu greifen, so dass ich diesen Schlüssel unter/Nodes referenzieren und dann dieses einzelne Element anstelle der gesamten Knotenreferenz löschen kann, was ist mDatabase.child ("Knoten") .removeValue() tut derzeit. Wenn ich etwas möchte wie mDatabase.child ("nodes"). Child (pushedKey) .removeValue().

wenn ich Daten an Knoten senden, sieht es so aus.

mDatabase.child("nodes").push().setValue(POJO); 

ich dies mit, es zu löschen ...

main_ListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 

      //Delete node 
      listAdapter.mNodes.remove(position); 
      mDatabase.child("nodes").push().getRef().removeValue(); 
      listAdapter.setNotifyOnChange(true); 
      Toast.makeText(getApplicationContext(),"Removed Item at: " + position,Toast.LENGTH_SHORT).show(); 
      main_ListView.setAdapter(listAdapter); 
      return true; 
     } 
    }); 

Beispiel

enter image description here

Jede Hilfe wäre dankbar Dank sein. :)

+0

Haben Sie es versucht? firebase.child ("Knoten"). removeValue(); – Isuru

+0

https://www.firebase.com/docs/web/api/firebase/remove.html – Isuru

+0

Nicht mehr korrekt. Firebase.google.com/docs ist aktuell. –

Antwort

2

Ich habe das herausgefunden.

Um dies zu erreichen mit der Verwendung von Knoten generiert durch .push(). Sie müssen Ihr POJO (einfaches altes Java-Objekt) ändern, das Ihre Daten darstellt. Fügen Sie einfach ein Zeichenfolgenfeld für Schlüssel hinzu.

Löschen Sie dann vorhandene Daten oder fügen Sie das Schlüsselfeld allen Daten im Knoten hinzu.

Ich habe diesen Code verwendet und dann die Methode aufgerufen, als ich das neue Objekt meiner Datenbank hinzugefügt habe.

private void GenerateKey() { 
    mKey = mNodeRef.push().getKey(); 
    Log.i(TAG, "NODE CHILD KEY: " + mKey); 
    if(mKey.equalsIgnoreCase(mKey)){ 
     mKey = mNodeRef.push().getKey(); 
     Log.i(TAG, "NEW NODE CHILD KEY: " + mKey); 
    } 
} 

Dann in dem Bereich, in dem ich es lösche, verwende ich diesen Code. Insbesondere lösche ich bei langem Drücken und gebe dem Benutzer dann die Wahl, ob er es löschen möchte oder nicht.

main_ListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) { 
      //Dialog 
      final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MainActivity.this); 
      dialogBuilder.setTitle("Please Don't Kill Me!"); 
      dialogBuilder.setPositiveButton("Kill Me...", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        //Delete node 
        Log.d(TAG, "NUM of NODES: " + listAdapter.mNodes.size()); 
        NodeObject pos = listAdapter.mNodes.get(position); 
        Log.i(TAG, "Generated Key: " + mKey); 
        String selectedKey = listAdapter.mNodes.get(position).getKey(); 
        Log.i(TAG, "Selected Key: " + selectedKey); 
        mNodeRef.child(selectedKey).removeValue(); 
        listAdapter.mNodes.remove(pos); 
        listAdapter.notifyDataSetChanged(); 
        main_ListView.setAdapter(listAdapter); 
        Toast.makeText(getApplicationContext(), "Node has been murdered terribly." 
          , Toast.LENGTH_SHORT).show(); 
       } 
      }). 
        setNegativeButton("Don't Kill Me!", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          Toast.makeText(getApplicationContext(), "Fine, ya coward." 
            , Toast.LENGTH_SHORT).show(); 
         } 
        }); 

      dialogBuilder.create().show(); 
      /* 
      Toast.makeText(getApplicationContext(),"Item at: " + position,Toast.LENGTH_SHORT).show(); 
      Toast.makeText(getApplicationContext(), "" +listAdapter.mNodes.size(), Toast.LENGTH_SHORT).show();*/ 


      return true; 
     } 
    }); 

Schließlich rief ich die Methode, wo ich den Knoten hinzufügen.

private void addNode() { 
    //Get generated key set it to the node 
    GenerateKey(); 
    Log.i(TAG, "ADD NODE GENERATED KEY: " + mKey); 
....... 
} 
Verwandte Themen