2010-02-12 9 views

Odpowiedz

24

Można zadzwonić StartService (intent) tak:

MyObject obj = new MyObject(); 
Intent intent = new Intent(this, MyService.class); 
intent.putExtra("object", obj); 
startService(intent); 

Przedmiotem chcesz wysłać musi wdrożyć Parcelable (można odwołać się do tego Percelable guide)

class MyObject extends Object implements Parcelable { 

    @Override 
    public int describeContents() { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     // TODO Auto-generated method stub 

    } 

} 

i z serwisu, w metodzie tej onStart() lub() onStartCommand na poziomie api 5 lub wyższej, można uzyskać obiektu:

MyObject obj = intent.getParcelableExtra("object"); 

To wszystko :)

+0

Jak wysłać więcej niż jedną wartość danych do Przesyłki? Mam dwa ciągi, które muszę wysłać. – jax

+0

intent.putExtra ("my.first.string", "something"); intent.putExtra ("my.second.string", "something else"); – hackbod

+0

To nadal nie działa dla mnie. Zrobiłem wszystkie powyższe, ale nadal mam problemy. Jak mam przekazać cały stan obiektu przez Parcelable? Wiem, że mogę wysyłać podstawowe typy, takie jak String i Array, ale obiekt zawiera bardziej złożone klasy niż tylko te. – jax

1

jak Bino powiedział, trzeba mieć swój obiekt niestandardowy wdrożyć Parcelable interfejs, jeśli chcesz, aby przekazać je do usługi za pośrednictwem intencji. Spowoduje to, że obiekt stanie się "serializowalny" w sensie Android IPC, dzięki czemu można go przekazać do obiektu Intent o nazwie putExtra (String, Parcable).

W przypadku prostych typów pierwotnych istnieje już kilka metod: setExtra (String, prymitywów). Ponieważ jednak rozumiem cię, nie jest to opcja dla Ciebie, dlatego powinieneś wybrać Parcelę.

8

Jeśli nie chcą wprowadzić Parcelable a obiekt jest możliwy do serializacji

użycie tego

W nadawcy Activiy

Intent intent = new Intent(activity, MyActivity.class); 

Bundle bundle = new Bundle(); 
bundle.putSerializable("my object", myObject); 

intent.putExtras(bundle); 

startActivity(intent); 

W odbiorniku:

myObject = (MyObject) getIntent().getExtras().getSerializable("my object"); 

Działa dobrze dla mnie spróbuj. Ale obiekt musi być możliwy do serializacji :)

+0

Dla mnie, jeśli pracował, ale musiałem coś zmienić, w części wysyłającej: 'intent.putExtra (" przekazany obiekt ", bundle.getSerializable (" mój obiekt "));' Oraz odbierającego: 'myObject = (MyObject) intent.getExtras(). GetSerializable (" przekazany obiekt ");' – Ruocco

Powiązane problemy