2012-06-11 5 views
6

ich diesen Verwenden Parcel, um ein Objekt von einem Android-Aktivität passieren zu einem anderen

class A extends Activity{ 
    private class myClass{ 
    } 
    myClass obj = new myClass(); 

    intent i = new Intent(); 
    Bundle b = new Bundle(); 
    b.putParcelable(Constants.Settings, obj); //I get the error The method putParcelable(String, Parcelable) in the type Bundle is not applicable for the arguments (int, A.myClass) 
    i.setClass(getApplicationContext(),B.class); 
    startActivity(i); 
} 

Wie tun möchte verwende ich Parcel passieren obj an Aktivität B?

Antwort

5

Wie der Fehler schon sagt, Sie müssen Machen Sie Ihre Klasse (myClass in diesem Fall) zu implementieren Parcelable. Wenn Sie sich die documentation for Bundle betrachten, nehmen alle putParcelable Methoden entweder eine Parcelable oder eine Sammlung von ihnen in irgendeiner Form. (Dies macht Sinn, da der Name.) Also, wenn Sie diese Methode verwenden möchten, müssen Sie eine Parcelable Instanz haben, in dem Bündel zu setzen ...

Natürlich kann man nicht haben putParcelable zu verwenden - Sie können stattdessen Serializable implementieren und putSerializable anrufen.

+0

Die Art, wie ich die Serializable-Schnittstelle verstanden habe, ist, dass sie Serialisierung und Deserialisierung unterstützt. Wie ist das hier anwendbar? Auch, wenn ich Parcelable implementiere, wie konvertiere ich mein Objekt in ein Paket? Kannst du mich auf ein Beispiel hinweisen? – Namratha

+0

@Namratha: Sie versuchen, Informationen herumzugeben, wozu genau Serialisierung da ist. Wenn Sie innerhalb desselben Prozesses arbeiten, brauchen Sie, soweit ich das beurteilen kann, kein Bündel, aber wenn Sie Informationen zwischen Prozessen austauschen müssen, sprechen Sie über die Serialisierung in der einen oder anderen Form . –

+0

Ich sehe. Aber ich lese hier http://shri.blog.kraya.co.uk/2010/04/26/android-parcel-data-to-pass-between-activities-using-parcelable-classes/ dass Serializable mit a assoziiert ist Performance-Hit während Parcelable ist nicht. Auch habe ich immer noch Probleme, mein Objekt in eine Parcelable-Instanz zu konvertieren. – Namratha

7

Erstellen Sie Ihre Klasse und implementiert Serializable:

private class myClass implements Serializable { 
    } 

Und tun:

myClass obj = new myClass(); 
Intent aActivity = (A.this, B.class); 
intent.putExtra("object", obj); 

Auf Empfängerseite:

myClass myClassObject = getIntent().getSerializableExtra("object"); 
+0

Ich glaube, du Intent aActivity = new Intent (A.This, B.class) bedeuten; ? Vielen Dank! – Namratha

2

Parcelable ist ein Fehler beim Schreiben von Code, aber kostengünstiger als Serializable. Werfen Sie einen Blick auf die unten angegebenen Link -

Parcelable Vs Serializable