3

J'ai une application qui utilise un service pour créer un ArrayList d'objets personnalisés (myObject) toutes les x secondes. Je veux ensuite que mon activité obtienne cette ArrayList.Comment envoyer un ArrayList d'objets personnalisés dans un Bundle

Je prévois actuellement avoir le service envoyer un message au gestionnaire de l'activité à chaque fois qu'il termine la requête pour les données. Je veux que le message au gestionnaire contienne l'ArrayList de MyObjects.

Lors de la construction de la méthode dans l'activité pour obtenir ce ArrayList sur le message, je remarquais que je ne pouvais pas.

Si j'ai essayé

msg.getData().getParcelableArrayList("myObjects") 

Ensuite, la méthode que je passais à celui attendu ArrayList ne l'accepterait pas. Si j'ai essayé transcrira les résultats obtenus:

(ArrayList<MyObject>)msg.getData().getParcelableArrayList("myObjects") 

J'ai reçu l'erreur: Cannot cast from ArrayList<Parcelable> to ArrayList<MyObject>

MyObject implémente Parcelable et je l'ai envoyé avec succès un ArrayList de mon service à mon activité en ayant mon activité appel d'une méthode sur le service pour le récupérer. J'essaie de ne pas avoir mon service d'enquête sur mon service pour ces données, cependant.

1) Comment puis-je envoyer un ArrayList à l'intérieur du paquet dans un message à handler? 2) Existe-t-il un modèle différent que j'utiliserais pour que mon service mette à jour les données de mon activité qui pourraient être visibles ou non? Je veux toujours que les données de mon activité soient les plus récentes du Service.

Répondre

0

Il y a un autre modèle qui devrait être utilisé. Une autre question que je posais a fourni la réponse:

Suppress notifications from a service if activity is running

En ce qui concerne # 1, vous pouvez contourner en tout supprimant les génériques des déclarations de ArrayList et de coulée, le cas échéant en cas de besoin. Je sais que cela fonctionne parce que c'est ce que j'ai fait avant refactoring basé sur l'autre question posée.

0

Si le casting est le problème, il suffit de laisser être, ne pas le jeter, l'erreur disparaîtra.

1

J'ai eu exactement la même question et tout harcelaient toujours avec le Parcelable, je trouve que les variables statiques ne sont pas une mauvaise idée pour la tâche.

Vous pouvez simplement créer un champ statique

public static ArrayList<MyObject> myObjects = .. 

et de l'utiliser d'ailleurs via MyRefActivity.myObjects

Je n'étais pas sûr de ce que les variables statiques publiques impliquent dans le cadre d'une application avec des activités.Si vous avez également des doutes sur ceci ou sur des aspects de la performance de cette approche, reportez-vous à:

Vive.