【问题标题】:Passing object from one application to another将对象从一个应用程序传递到另一个应用程序
【发布时间】:2012-09-13 12:58:44
【问题描述】:

我需要将自定义对象从一个应用程序的活动传递到另一个应用程序的主要活动。

我是否能够使用 intent.putExtra 来完成此操作,如图所示:

putExtra("key",obj);

显示错误,因为 putExtra 方法不支持。如何实现?

感谢任何帮助。

编辑

以下类的实例,我需要传递给另一个应用程序。我将有对象'obj'如下,我需要传递:

CounterAndNotifier obj = new CounterAndNotifier(5, this)

obj是要传递的对象

public class CounterAndNotifier
{
private int counter = 0;
private int count;
private Runnable runnable;

public CounterAndNotifier(int count, Runnable runnable)
{
    this.count = count;
    this.runnable = runnable;
}

public synchronized void incrementCounter()
{
    counter++;
    if (counter == count) {
        runnable.run();
    }
}
}

【问题讨论】:

  • 了解 Parceable 接口
  • putExtra 传递字符串值,但为什么你传递?我的事情使对象公开静态并在其他活动中使用..我的事情很简单..
  • Chirag Patel - 这是关于应用程序活动之间的传递。不在同一应用程序的活动之间

标签: android android-sdk-2.3


【解决方案1】:

更新 2:构造函数示例:

CounterAndNotifier counter = new CounterAndNotifier(0, new SerializableRunnable() {
            @Override
            public void run() {

            }
        });

SerializableRunnable runnable = new SerializableRunnable() {
        @Override
        public void run() {
            /* Running code here */
        }
});
CounterAndNotifier counter = new CounterAndNotifier(0, runnable);

更新:Runnable 是一个接口,它本身不能序列化。为了解决这个问题,创建一个像这样的新类:

public abstract class SerializableRunnable implements Runnable, Serializable {
    /* Nothing needs to go here */
}

然后将您对 Runnable 的引用更改为 SerializableRunnable,您应该能够毫无问题地将您的对象序列化为意图。

您的新对象将如下所示:

public class CounterAndNotifier implements Serializable
{
    private int counter = 0;
    private int count;
    private SerializableRunnable runnable;

    public CounterAndNotifier(int count, SerializableRunnable runnable)
    {
        this.count = count;
        this.runnable = runnable;
    }

    public synchronized void incrementCounter()
    {
        counter++;
        if (counter == count) {
            runnable.run();
        }
    }
}

您仍然可以使用相同的方式创建 Runnable 对象,只是使用不同的名称。

原答案: 您不能将常规对象放入 Intent 额外对象中。如果您的对象成员都是可序列化的类型,那么您只需实现Serializable 接口,然后您可以将对象放入Intent。否则,您可以实现 Parceable 并将您的对象扁平化为 Parcel。

只要您的对象成员是基本类型,使用Serializable 需要的代码更改要少得多。此外,您应该首先检查接收应用程序是否支持以确定您应该使用哪个。

看起来像这样:

public class YourObject implements Serializable {

    private static final long serialVersionUID = -6242440735315628245L;
    /* Your class members */

}

添加到意图:

Intent intent = new Intent();
intent.putExtra("YourKey", new YourObject());

脱离本意:

YourObject obj = (YourObject)intent.getSerializableExtra("YourKey");

【讨论】:

  • 我已经编辑了我的问题,显示了我需要传递给另一个应用程序的对象。我明天肯定会尝试一下,如果可行,我会接受你的回答。希望这些对象是可序列化的,并且按照您建议的方式工作。
  • 更新了我的答案以反映您尝试传递的对象。
  • 会很棒,如果你能展示我应该如何从另一个类调用构造函数 CounterAndNotifier。这个类是否也应该实现 Runnable/Serializble? SerializableRunnable 对象如何传递给构造函数?
  • 使用示例构造函数调用更新了答案。调用类不需要是可序列化的,只有进入意图的对象应该实现可序列化。
猜你喜欢
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
相关资源
最近更新 更多