Как да изпратите ArrayList от потребителски обекти в пакет

Имам приложение, което използва услуга за създаване на ArrayList от персонализирани обекти (MyObject) на всеки x секунди. След това искам моята дейност да получи този ArrayList.

В момента планирам услугата да изпраща съобщение до манипулатора на активността всеки път, когато завърши заявката за данните. Искам съобщението до Handler да съдържа ArrayList на MyObjects.

Когато изграждах метода в Activity, за да извадя този ArrayList от съобщението, забелязах, че не мога.

Ако опитах

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

След това методът, на който го предавах и който очакваше ArrayList, нямаше да го приеме. Ако се опитах да прехвърля резултатите:

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

Получих грешката: Cannot cast from ArrayList<Parcelable> to ArrayList<MyObject>

MyObject внедрява Parcelable и аз успешно изпратих ArrayList от моята услуга към моята дейност, като накарах моята дейност да извика метод в услугата, за да го извлече. Опитвам се обаче да се откажа от дейността ми да проверява моята услуга за тези данни.

1) Как мога да изпратя ArrayList вътре в пакета в съобщение до манипулатора?

2) Има ли различен модел, който трябва да използвам, за да накарам моята услуга да актуализира данните в моята активност, които могат или не могат да бъдат видими? Винаги искам данните в дейността ми да са най-новите от Услугата.


person twilbrand    schedule 16.09.2010    source източник


Отговори (3)


Имах абсолютно същия въпрос и докато все още се занимавах с Parcelable, открих, че статичните променливи не са толкова лоша идея за задачата.

Можете просто да създадете статично поле

public static ArrayList<MyObject> myObjects = .. 

и го използвайте от другаде чрез MyRefActivity.myObjects

Не бях сигурен какво означават публичните статични променливи в контекста на приложение с дейности. Ако също имате съмнения относно това или относно аспектите на ефективността на този подход, вижте:

наздраве

person Orkun Ozen    schedule 02.02.2015

Има друг модел, който трябва да се използва. Друг въпрос, който зададох, даде отговор:

Потискане на известията от услуга, ако дейността се изпълнява

Що се отнася до #1, можете да го заобиколите, като просто премахнете генеричните елементи от декларациите на ArrayList и ги прехвърлите, където е необходимо. Знам, че това работи, защото това е, което направих преди рефакторинг въз основа на другия зададен въпрос.

person twilbrand    schedule 17.09.2010

Ако кастът е проблемът, просто го оставете, не го кастирайте, грешката ще изчезне.

person urSus    schedule 08.09.2013