2017-07-30 1 views
0

Ich versuche, eine einzelne Instanz einer Zeichenfolge aus einem Array Feld in Parse zu entfernen:entfernt eine einzelne Instanz eines String gespeichert in einer ParseObject Array List

final ParseObject post = mPosts.get(position); 
List<String> repliedToByList = post.getList("repliedToBy"); // Retrieve current list 
ParseUser currentUser = ParseUser.getCurrentUser().getObjectId(); 
repliedToByList.remove(currentUserObjectId); // Remove first instance of specified objectid 
post.remove("repliedToBy"); // Clear the entire list 
post.addAllUnique("repliedToBy", Collections.singletonList(repliedToByList)); // Add the new list 

Dieser String ist der aktuelle objectId des Benutzers, die hinzugefügt wird, wenn ein Benutzer auf einen "post" antwortet, wie zum Beispiel:

post.addAll("repliedToBy", Collections.singletonList(ParseUser.getCurrentUser().getObjectId())); 

zum Beispiel kann das Array enthält:

["1RtqEgy1ct","f4qEWY8UOM","f4qEWY8UOM"] 

Gibt es eine Möglichkeit, nur eine einzige Instanz von f4qEWY8UOM zu entfernen? Die Alternative ist, alles mit Inkrementen/Dekrementen zu machen, aber das ist nicht ideal für mich.

+0

konvertieren Sie die Liste in eine Instanz von ArrayList und iterieren über ihre Einträge anstelle von List.remove() –

+0

Auf dem Server habe ich das Array als eine Variable gespeichert, dann iteriert durch die Suche nach meiner Zeichenfolge, und wenn ich gefunden Sie löschte den Wert dieses Indexes aus dem Array + brach aus der Schleife und speicherte die Variable dann als den Wert des Objekts für den richtigen Schlüssel, anstatt ihre add/remove-Methoden zu verwenden. Nachteil ist, dass dies wahrscheinlich dazu führt, dass die Datenbank das Array neu indiziert, was je nach Anzahl der Indizes, die Sie mit diesem Schlüssel verwenden, eine Weile dauern kann. –

Antwort

0

mein replyCount Inkrementieren ist einfach:

// Increment replyCount 
postObject.increment("replyCount", 1); 
postObject.saveInBackground(); 

Aber es ist etwas falsch mit der erklärten Abnahme Methode Android Parse SDK, das heißt postObject.increment("replyCount", -1), so habe ich versucht, die folgenden:

Statt eine Liste der Speicherung ObjectIds in einer Liste und dann seine Größe zählen, ich einfach inkrementieren/dekrementieren auf die folgende Weise, indem immer die vorherige replyCount holen, 1 subtrahieren und dann den neuen Put-Aufruf speichern:

// Decrement replyCount 
int newReplyCount = postObject.getInt("replyCount") - 1; 
postObject.put("replyCount", newReplyCount); 
postObject.saveInBackground(); 
Verwandte Themen