2017-04-11 4 views
1

J'ai un realmList, disons studentsList dans un realmObject, disons classe. Je veux demander une liste d'étudiants pour une classe donnée et mettre à jour la même chose dans studentList. Le serveur retourné studentList peut contenir des anciens et des nouveaux étudiants. Donc, je veux que ma liste de domaine mette à jour les informations pour les anciens élèves avec l'ajout de nouveaux élèves le cas échéant.Ajouter/Mettre à jour realmObject dans RealmList

Ce que je fait est,

  1. Initié une boucle avec la taille == serverReturnedStudentList.size()
  2. étudiants, créés dans la boucle et ajouté en royaume (en utilisant realm.copyToRealmOrUpdate (étudiant))
  3. Objet étudiant géré reçu de l'étape 2.
  4. Récupère la liste des étudiants pour la classe X et vérifie si la liste studentList contient ou non managedObject.
  5. Sinon, l'étudiant ajouté à studentList else n'a rien fait.

Cela fonctionne comme prévu mais je sais que ce n'est pas la bonne approche. Si j'ignore la vérification "contains" (@ step4) et ajoute directement l'objet géré à realmList, plusieurs entrées commencent à s'afficher dans realmList.

Quelle serait la meilleure approche pour gérer ce scénario?

Un autre problème est, j'ai le nombre n de classe et x sections sous chaque classe. Je fais des requêtes nx en parallèle et quand j'essaie de lancer asyncExecutions nx fois, j'ai une exception de taille de pool (ce qui est évident) et je ne peux pas exécuter ce thread sur une interface utilisateur car mon interface ne répond plus pendant 3-5 secondes la boucle pour chaque studentList est exécutée avec executeTransaction pour chaque étudiant)

Toute aide/suggestion serait grandement appréciée.

Merci à l'avance. À votre santé!

+0

'plusieurs entrées commencent à s'afficher dans realmList. Quelle serait la meilleure approche pour gérer ce scénario? Avez-vous un '@ PrimaryKey'? – EpicPandaForce

+0

En outre, ne pas exécuter une transaction pour chaque étudiant, je ne sais pas pourquoi vous faites cela. – EpicPandaForce

+0

@EpicPandaForce Oui j'ai une clé primaire pour chaque objet étudiant et pour clarifier davantage, il n'y a qu'un seul objet pour l'élève dit x, mais plusieurs entrées sont là pour studentX dans studentList si je saute studentList.contains (studentX) étape avant ajouter studentX à studentList. – AndoAiron

Répondre

0

L'approche me semble correcte. Une chose que vous devez comprendre que copyToRealmOrUpdate() pour mettre à jour votre realmList ne dupliquera pas les données pour les entrées avec même clé primaire.

+0

Oui, je comprends le concept derrière copyToRealmOrUpdate() et Oui J'ai une clé primaire pour chaque objet étudiant et pour clarifier davantage, il n'y a qu'un seul objet pour l'élève dit x, mais plusieurs entrées sont là pour studentX dans studentList si Je saute l'étape studentList.contains (studentX) avant d'ajouter studentX à studentList. – AndoAiron

+0

Alors laissez-moi comprendre: il y a studentList qui contient de nombreuses entrées pour studentX et d'autres. Je suppose maintenant que vous sépare studentX de la liste avec studentList.contains (studentX) et en essayant de mettre à jour le studentX. Est-ce? –

+0

Je ne vous ai pas eu exactement. Ce que je veux, c'est ajouter un étudiant à studentList s'il n'est pas présent dans la liste ou simplement mettre à jour l'information d'un étudiant déjà présent dans la liste. Si un étudiant est déjà présent/attaché à une liste d'étudiants et que j'effectue copyToRealmOrUpdate (unManagedStudent), les informations seront mises à jour et rien d'autre ne sera fait. mais si un tel étudiant n'était pas là dans la studentList, j'ai encore besoin d'effectuer copyToRealmOrUpdate (unManagedStudent) avec une autre étape qui consiste à ajouter nowManagedStudent à realmList. – AndoAiron