【问题标题】:Android: Sending an object from one activity to other activityAndroid:将对象从一个活动发送到另一个活动
【发布时间】:2012-08-04 07:42:46
【问题描述】:

要将任何对象的意图从一个活动发送到另一个活动,我们可以使用 Parcelable 接口或 Serializable 接口。两者有什么区别?哪个更适合使用?

此外,我们可以发送字符串、整数类型的对象,而无需使用所有这些接口。怎么可能?

【问题讨论】:

  • 谢谢大家帮助我。谁能给出“我们可以在不使用所有这些接口的情况下发送字符串、整数类型的对象。这怎么可能?”的答案?
  • 您可以使用 Intent 本身发送基本数据类型。但是,当涉及到传递自定义对象时,对象的 ArrayList 最好使用 Parcelable。

标签: android serialization android-intent parcelable


【解决方案1】:

Java 可序列化: Serializable 来自标准 Java,实现起来要容易得多,您只需实现 Serializable 接口并添加覆盖两个方法即可。

  private void writeObject(java.io.ObjectOutputStream out)
              throws IOException 
  private void readObject(java.io.ObjectInputStream in)
              throws IOException, ClassNotFoundException

Serializable 的问题在于它试图适当地处理所有事情,并使用大量反射来确定正在被序列化的类型。所以它变成了一个强壮的对象

Android Parcelable: Android 进程间通信 (AIPC) 文件,用于告诉 Android 应如何编组和解组您的对象。它不那么通用,不使用反射,因此它应该有更少的开销和更快的速度。

【讨论】:

    【解决方案2】:

    可以发送String、Integer等数据类型,也可以发送实现Parcelable接口的类的对象如下...

    Intent intent = new Intent(CallingActivity.this, CalledActivity.class);
    intent.putExtra("IntegerExtra", intValue);
    intent.putExtra("StringExtra", stringValue);
    intent.putExtra("ParcExtra", parcObject);
    startActivity(intent);
    

    而且,在接收端可以编写如下代码,

    intValue = getIntent().getIntExtra("IntegerExtra", 0);
    stringValue = getIntent().getStringExtra("StringExtra");    
    parcObject = ((YourParcalabeDataType) getIntent().getParcelableExtra("ParcExtra"));
    

    希望这可以解决您的问题... :)

    【讨论】:

    • Midhu dev_android 没有要求实现,他只是要求差异&哪个更可取。请仔细阅读问题。
    • @AndroidCoader 我非常仔细地阅读了这个问题,发现最后几行说:“此外,我们可以发送字符串,整数类型的对象而不使用所有这些接口。这怎么可能?”就我的理解而言,这就像要求实施。这就是为什么我这样回答这个问题。
    • dev_android 很奇怪字符串,整数类型的对象没有使用所有这些接口,即使我们可以发送该数据,这怎么可能 - 根据我的理解 :) 尽管指导的努力受到质疑人坚持下去,我的目的不是让士气低落。
    【解决方案3】:

    除了发送一个对象之外,只发送一个指向您的内容的 URI 可能更容易。这将简化发送并消除发送对象的需要,因为 URI 会理想地指向您感兴趣的内容。当然这取决于您尝试传递的内容。

    【讨论】:

      【解决方案4】:

      您可以从 link 中找到 Parcelable 和 Serializable 接口之间的区别。 基本上 Parcelable 是为 android 创建的,比 Serializable 效率高得多。

      您可以通过使用 Bundles 并将这些包链接到意图来简单地发送字符串或整数。

      Intent i = new Intent(getApplicationContext(),YourClass.class);
      Bundle b = new Bundle();
      b.putString("string", "string");
      i.putExtras(b);
      startActivity(i);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-06
        • 2015-07-20
        • 2014-09-09
        • 1970-01-01
        • 2018-10-10
        • 2013-01-12
        相关资源
        最近更新 更多