2011-08-22 5 views
1

J'essaye d'établir un écouteur de PIM qui mettra à jour un MainScreen où tous les contacts du téléphone sont énumérés.Supprimer une ligne de VerticalFieldManager

Ce que je fais est la suivante:

  • Je chargement pour une seule fois un formulaire appelé ContactsForm et je stocke dans le RuntimeStore

  • J'ai créé un PIMListListener pour écouter tous les changements qui se produiront dans le carnet d'adresses.

  • Lorsqu'un contact est ajouté, j'ajoute au contactsForm avec succès

  • Lorsqu'un contact est retiré, je suis confronté à un gros problème de le supprimer: S !!!

Je reçois cette exception: "IllegalArgumentException"; Le texte de cette exception est: UiEngine accédé sans contenir le verrou d'événement. Je connais de telles erreurs et je sais comment les résoudre. Donc, je le code suivant:

UiApplication.getUiApplication().invokeLater(new Runnable() { public void run() { 
    synchronized(UiApplication.getEventLock()) { 
    uiContacts.vm.delete(uiContacts.vm.getField(j)); 
    } 
}}); 

Cela devrait résoudre le problème. Mais je continue d'avoir cette erreur encore et encore. Comment résoudre ceci?

Répondre

4

Les écouteurs, comme le PIMListListener, ne reçoivent pas leurs rappels dans le même contexte d'application que votre UiApplication. Donc, dans votre code, UiApplication.getUiApplication() ne fonctionne pas vraiment comme vous le souhaitez.

La meilleure chose à faire serait de stocker une référence à votre UiApplication dans un endroit où le rappel peut atteindre (lors de l'initialisation du UiApplication, peut-être), puis remplacer UiApplication.getUiApplication().invokeLater(...) avec myUiApp.invokeLater(...), où myUiApp est la référence à votre UiApplication que vous avez stockée plus tôt.

+0

Merci l'homme, c'était la solution !!! :) –

+0

Bien sûr, pas de problème. –