2

我编写了一个应用程序,它有一个<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我会在第二个应用程序中模仿该类并将其转换为该类吗?还是有其他选择?

4

2 回答 2

3

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

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

Also, the two apps no longer need to maintain a class in the same namespace or even call them by the same name.

And as a final note, you no longer need to publish a jar, only your documentation will suffice.

于 2012-03-04T16:02:34.400 回答
1

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

通过阅读第一个应用程序的作者发布的 API 文档。

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

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

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

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

如果MyObject具有您描述的结构,请考虑将StringandString[]作为单独的附加项,或者将它们放在 a 中Bundle并将其用作附加项,以避免尝试Parcelable在应用程序之间使用自定义对象。

于 2012-03-04T15:51:30.923 回答