1

如何使用a 传递objecta ?classintent

前任。

MyClass mc = new MyClass();

我怎样才能通过mc使用intent

4

4 回答 4

3

您需要使用 Android Parcelable

什么是包裹:

  • Parcel 是一种轻量级的 IPC(进程间通信)数据结构,您可以在其中将对象扁平化为字节流。

  • Parcelable 是一个特定于 Android 的接口,您可以在其中自己实现序列化。它的创建比 Serializable 更有效,并解决了默认 Java 序列化方案的一些问题。

如何使用 Parcelable :

1.实现一个接口 android.os.Parcelable ,它将生成 Parcelable 类的对象。

2.重写android.os.Parcelable接口的两个方法如下:

  • describeContents() - 定义您要打包的对象类型。

  • writeToParcel(Parcel dest, int flags) - 实际的对象序列化/扁平化发生在这里。您需要单独包裹对象的每个元素。

3.定义一个类型为 Parcelable.Creator 的名为 CREATOR 的变量

检查本教程:

http://prasanta-paul.blogspot.com/2010/06/android-parcelable-example.html

Parcelable vs 序列化

  • Java中的序列化太慢了+无法满足Android的进程间通信要求。因此,该团队构建了 Parcelable 解决方案。Parcelable 方法要求您显式序列化类的成员,但最终,您可以更快地序列化对象。

  • Serializable 的问题在于它试图适当地处理阳光下的一切,并使用大量反射来确定正在序列化的类型。

于 2013-05-09T12:35:25.857 回答
2

使用可序列化对象,并直接将其保存在 Bundle 或 Intent 中

发送对象

    Intent mIntent=new Intent();
    mIntent.putExtra("iis",new MyClass());

和你的班级

    private class MyClass implements Serializable{

}

到达另一端

MyClass mc=(MyClass) getIntent().getExtras().getSerializable("iis");

更新

您也可以将数据作为 Parcelable 对象发送。但要记住

如果您通过意图将非原始类型数据/对象发送到另一个活动,则您必须为该对象序列化或实现 Parcelable。首选技术是 Parcelable,因为它doesn't impact the performance

于 2013-05-09T12:36:28.403 回答
0

你的班:

 public class myClassObject implements Serializable {

      public myClassObject(){

      }
 }

意图传递:

Intent intent = new Intent(MainActivity.this,NextActivity.class);
    intent.putExtra("question_data", qData);
    intent.putExtra("answer_string", answer);
    startActivity(intent);
于 2013-05-09T12:41:48.410 回答
0

一种选择是让您的类实现 Serializable 接口,然后您可以使用 Intent#putExtra() 方法的 putExtra(Serializable..) 变体以额外的意图传递对象实例。

Passing :
   intent.putExtra("MyClassObject", obj);  

To retrive 
getIntent().getSerializableExtra("MyClassObject");
于 2013-05-09T12:37:03.117 回答