0

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

我是否能够使用 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();
    }
}
}
4

1 回答 1

2

更新 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");
于 2012-09-13T13:31:34.137 回答