2012-03-04 87 views
2

我已经编写了一个具有<intent-filter/>的应用程序,以便其他应用程序可以使用startActivityForResult()启动它。在结果在Android应用程序中使用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类第二应用程序并将其转换为呢? 还有其他选择吗?

回答

3

你可以使用像Jackson这样的库来将你的对象序列化为一个JSON字符串,然后你在另一端反序列化。

它更加灵活,并且可以消除如果您决定添加一个额外字段时传递的数据版本不一致的问题。

此外,这两个应用程序不再需要在相同的名称空间中维护类,甚至不需要使用相同的名称来调用它们。

作为最后一点,您不再需要发布jar,只有您的文档就足够了。

+0

实际上这是个好主意。我可以用'MyObject'中的'getAsJson()'创建自己的JSON对象,并将其作为'Intent'上的'String'发送,然后我只需要维护一个带有JSON结构的API – Blundell 2012-03-04 16:08:57

+0

yes 。无需创建getAsJson方法并自己实现它。看看杰克逊。它会照顾到你的序列化为JSON。 – 2012-03-04 16:10:07

+2

请注意,Android内置了'org.json'类.Jackson很酷,但是您对第三方(即使用此结果的任何人)施加的依赖性越少,您的效果就越好。 – CommonsWare 2012-03-04 16:39:02

1

它是如何知道的意图额外的名义接收

通过读取第一应用程序的作者发表的API文档。

我将如何创建收到的对象并将其转换回不属于此应用程序的MyObject?

第一个应用程序的作者还必须发布一个包含实现MyObject的JAR,第二个应用程序的作者将添加到他们的项目中。而且,第一个应用程序的作者可能不需要更改MyObject,或者至少确保序列化版本控制工作正常。

我只是在第二个应用程序中模仿MyObject类并将其转换为该类?

如果通过“模仿”你的意思是“有一个类具有完全相同的类名,完全相同的包名和完全相同的序列化逻辑”,那么是的,尽管我然后担心你使用术语“刚刚” ... :-)

如果MyObject有你所描述的结构,只考虑把StringString[]作为单独的附加功能,或者把它们放在一个Bundle并使用它作为一个额外的,以避免试图在应用程序之间使用自定义Parcelable对象。

+0

干杯马克,MyObject比这更复杂。任何推荐的链接用于创建API文档并发布jar? – Blundell 2012-03-04 16:00:07

+0

@Blundell:“任何用于创建API文档的建议链接” - ummmm ...使用网页? “并发布一个罐子?” - 这是标准的Java,除非'MyObject'具有Android特定的钩子(例如,需要'android。*'类)。在这种情况下,我建议创建一个Android库项目而不是JAR。 – CommonsWare 2012-03-04 16:36:50

+0

我的意思更像是一个简单的版本:http://docs.oracle.com/javase/1.4.2/docs/tooldocs/windows/javadoc.html我会去Google! – Blundell 2012-03-04 17:31:53

相关问题