2010-02-12 11 views

risposta

24

È possibile chiamare StartService (Intent) come questo:

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

L'oggetto che si desidera inviare deve implementare Parcelable (è possibile fare riferimento a questo 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 

    } 

} 

e con il servizio, nel metodo onStart() o onStartCommand() per il livello di API 5 e successivi, è possibile ottenere l'oggetto:

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

Questo è tutto :)

+0

Come si invia più di un singolo valore di dati al Parcel? Ho due stringhe che ho bisogno di inviare. – jax

+0

intent.putExtra ("my.first.string", "something"); intent.putExtra ("my.second.string", "qualcos'altro"); – hackbod

+0

Questo non funziona ancora per me. Ho fatto tutto quanto sopra ma sto ancora avendo problemi. Come intendo passare l'intero stato dell'oggetto tramite Parcelable? So di poter inviare tipi di base come String e Arrays ma per oggetto contiene classi più complesse di queste. – jax

1

Come Bino Detto questo, è necessario avere il vostro oggetto personalizzato implementi l'interfaccia Parcelable se si desidera passare a un servizio tramite un intento. Questo renderà l'oggetto "serializzabile" in senso IPC per Android in modo che tu possa passarli a una chiamata putExtra (String, Parcelable) dell'oggetto di Intent.

Per i tipi primitivi semplici, esiste già un gruppo di metodi setExtra (String, tipo primitivo). Per quanto ti capisco, tuttavia, questa non è un'opzione per te, motivo per cui dovresti optare per un pacco.

8

Se non si desidera implementare Parcelable e l'oggetto è serializzabile

uso questo

In mittente activiy

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

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

intent.putExtras(bundle); 

startActivity(intent); 

Nel ricevitore:

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

Funziona bene per me provarlo. Ma l'oggetto deve essere serializzabile :)

+0

Per me se funzionava, ma dovevo cambiare qualcosa, sulla parte di invio: 'intent.putExtra (" oggetto passato ", bundle.getSerializable (" il mio oggetto "));' E sulla parte ricevente: 'myObject = (MyObject) intent.getExtras(). GetSerializable (" oggetto passato ");' – Ruocco

Problemi correlati