我编写了一个<intent-filter/>
的应用程序,以便其他应用程序可以使用startActivityForResult()
启动它。完成此活动后,它创建了一个对象,如:
(申请A)
public class MyObject implements Serializable {
private String name;
private String[] items
}
并在结果上设置它:
(申请A)
getIntent().putExtra("Extra_MyObject", myObject);
setResult(RESULT_OK, getIntent());
因此,收到此意图的第二个活动存在问题,如何知道要接收的意图名称,如何创建收到的对象并将其强制转换为不属于此应用程序的MyObject
?
(申请B)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == MY_REQ_CODE){
if(resultCode == RESULT_OK){
// So here how do I know what the intent data name is i.e. "Extra_MyObject"
// and how would I know the structure to cast the object back to a MyObject that isn't part of this project?
}
}
}
我是否只是模仿第二个应用程序中的MyObject
类并将其转换为该类?
或者还有其他选择吗?
答案 0 :(得分:3)
您可以使用像Jackson这样的库将对象序列化为JSON字符串,然后在另一端反序列化。
它更加灵活,如果你决定添加一个额外的字段,它将消除传递数据版本不一致的问题。
此外,这两个应用程序不再需要在同一名称空间中维护一个类,甚至不需要使用相同的名称来调用它们。
作为最后一点,您不再需要发布jar,只需要您的文档即可。
答案 1 :(得分:1)
它如何知道接收的意图名称
阅读第一个应用程序作者发布的API文档。
如何创建收到的对象并将其强制转换为不属于此应用程序的MyObject?
第一个应用程序的作者还必须发布一个包含MyObject
实现的JAR,第二个应用程序的作者将添加到他们的项目中。并且,第一个应用程序的作者要么永远不必更改MyObject
,要么至少确保序列化版本控制工作正常。
我是否只是模仿第二个应用程序中的MyObject类并将其强制转换为那个?
如果通过“模仿”表示“有一个类具有完全相同的类名,完全相同的包名称,以及完全相同的序列化逻辑”,那么是的,尽管我当时担心你使用的术语“只是” “......: - )
如果MyObject
具有您描述的结构,请考虑将String
和String[]
作为单独的附加内容,或者将它们放在Bundle
中并将其作为额外内容使用,以避免尝试在应用程序之间使用自定义Parcelable
对象。