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());

したがって、このインテントを受信する2番目のアクティビティには問題があります。受信するインテントの名前をどのように知るのでしょうか。また、受信したオブジェクトを作成して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?

        }
    }
}

2番目のアプリケーションのクラスを模倣して、MyObjectそれにキャストしますか?または他のオプションはありますか?

4

2 に答える 2

3

Jacksonのようなライブラリを使用して、オブジェクトを JSON 文字列にシリアル化し、それを反対側で逆シリアル化することができます。

これははるかに柔軟で、たとえば追加のフィールドを追加することにした場合に、一貫性のないバージョンのデータが渡されるという問題が解消されます。

また、2 つのアプリが同じ名前空間でクラスを維持したり、同じ名前で呼び出したりする必要がなくなりました。

最後に、jar を公開する必要はなくなりました。ドキュメントだけで十分です。

于 2012-03-04T16:02:34.400 に答える
1

受け取るインテント エクストラの名前をどのように知るか

最初のアプリケーションの作成者によって公開された API ドキュメントを読む。

受信したオブジェクトを作成して、このアプリケーションの一部ではない MyObject にキャストするにはどうすればよいですか?

MyObject最初のアプリケーションの作成者は、2 番目のアプリケーションの作成者がプロジェクトに追加する の実装を含む JAR も公開する必要があります。そして、最初のアプリケーションの作成者は、変更MyObjectする必要がないか、少なくともシリアライゼーションのバージョン管理が機能することを確認する必要があります。

2 番目のアプリケーションで MyObject クラスを模倣して、それにキャストするだけでよいでしょうか?

「模倣」とは、「まったく同じクラス名、まったく同じパッケージ名、およびまったく同じシリアル化ロジックを持つクラスを持つ」ことを意味する場合、はい、「ただ」という用語の使用について心配しています.. . :-)

あなたMyObjectが説明した構造を持っている場合は、アプリ間でカスタムオブジェクトを使用しようとするのを避けるために、StringString[]を個別のエクストラとして配置するか、 に配置してそれをエクストラとして使用することを検討してください。BundleParcelable

于 2012-03-04T15:51:30.923 に答える