如何在Android上将原始对象从一个活动传递到另一个活动?
当然,我们可以序列化(Serializable,Parcelable,来自/来自JSON)并传递对象数据的副本,并且可以创建具有相同数据的新对象;但它不会有相同的参考。
这是一些解决方案:
第一项活动的代码:
final Object objSent = new Object();
final Bundle bundle = new Bundle();
bundle.putBinder(OBJECT_KEY, new ObjectWrapperForBinder(objSent));
startActivity(new Intent(this, SecondActivity.class).putExtras(bundle));
第二项活动的代码:
final Object objReceived = ((ObjectWrapperForBinder)getIntent().getExtras().getBinder(OBJECT_KEY)).getData();
但要求的最低API级别 18
还有其他方法吗?
答案 0 :(得分:0)
这取决于你的目标
如果您要在一个流程中工作,只需使用 xcopy /Y /S "C:\Users\userName\workspace\Java-API" "C:\Users\userName\Downloads\dummyTest"
echo Finished copying stuff
cd .\trent\
echo We are in trent folder
mvn clean install
echo finished maven clean install
pause
模式即可。
但是,如果您想将您的真实对象传递给,例如Singleton
,其属性为Service
:
android:isolatedProcess="true"
然后你不能将你的原始对象传递给另一个进程。
你做不到。一个进程中的应用无法保存另一个进程中的对象 过程,更不用说“调用操作”了。
来源:Passing Objects in IPC using Messenger in Android
所以,我可以看到你正试图使用<service
android:name=".service.SomeService"
android:enabled="true"
android:exported="false"
android:isolatedProcess="true"/>
机制传递你的原始对象。在我看来,通过Intent
来实现它是不可能的,因为Intent
中包含的Bundle
不存储对真实对象的引用。所以,这是不可能的。
答案 1 :(得分:0)
在这种情况下,EventBus将是一个很好的选择。它类似于全局订阅观察者,它可以帮助在任何对象之间传递原始对象。
在要传递对象的活动中执行此操作:
EventBus.getDefault().register(this);
EventBus.getDefault().post(new MessageEvent());
在要接收对象的活动中执行此操作:
首先,注册活动:
EventBus.getDefault().register(this);
其次,使用@Subscriber定义一个接收对象的方法:
@Subscribe
public void onMessageEvent(MessageEvent event)
希望这会有所帮助。
答案 2 :(得分:0)
<强>解:强> BundleCompat允许对所有Android版本使用putBinder / getBinder。
ActivityA:
final Bundle bundle = new Bundle();
BundleCompat.putBinder(bundle,KEY, new ObjectWrapperForBinder(callback));
intent.putExtras(bundle);
ActivityB:
object = ((ObjectWrapperForBinder)BundleCompat.getBinder(intent.getExtras(),KEY)).getData();
答案 3 :(得分:-2)
示例对象应该是Parcelable。
SampleObject objSent=new SampleObject();
Intent intent=new Intent(mContext,NewActivity.class);
intent.putExtra(objSent);
startActivity(intent);