我需要将一个自定义对象从一个应用程序的活动传递给另一个应用程序的主要活动。
我是否可以使用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();
}
}
}
答案 0 :(得分: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是一个接口,它本身不是Serializable。要解决这个问题,请创建一个这样的新类:
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
并将对象展平为包裹。
只要对象成员是基本类型,使用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");