2017-07-30 2 views
0

Je suis en train de supprimer une instance unique d'une chaîne à partir d'un champ Array Parse:Suppression d'une instance unique d'une chaîne stockée dans une liste Array ParseObject

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 

Cette chaîne est objectId de l'utilisateur actuel, qui est ajouté lorsqu'un utilisateur répond à un "post", en tant que tel:

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

Par exemple, le tableau contient:

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

Est-il possible de supprimer une seule instance de f4qEWY8UOM? L'alternative est de tout faire en utilisant des incréments/décréments, mais ce n'est pas idéal pour moi.

+0

convertir la liste à une instance de ArrayList et itérer sur ses entrées au lieu d'appeler List.remove() –

+0

Sur le serveur, j'ai stocké le tableau en tant que variable, puis itéré par la recherche de ma chaîne, et si je trouvais il a supprimé la valeur de cet index du tableau + sort de la boucle, puis a stocké la variable en tant que valeur de l'objet pour la clé droite, plutôt que d'utiliser leurs méthodes add/remove. Le revers de la médaille est que cela entraîne probablement la réindexation de la base de données par la base de données, ce qui peut prendre un certain temps en fonction du nombre d'index que vous utilisez pour cette clé. –

Répondre

0

incrémenter mon replyCount est facile:

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

Mais il y a quelque chose de mal avec la méthode décrément Android Parse SDK indiqué, à savoir postObject.increment("replyCount", -1), j'ai donc essayé les éléments suivants:

Au lieu de stocker une liste de objectIds dans une liste, puis en comptant sa taille, je simplement incrémenter/décrémenter de la manière suivante, en récupérant toujours le précédent replyCount, en soustrayant 1, puis en sauvegardant le nouvel appel put:

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