0

Eclipse で GAE を使用して Android アプリを開発しています。
EndPoint クラスの 1 つに、「Bla」タイプのオブジェクトを返すメソッドがあります。

public Bla foo()
    {
        return new Bla();
    }

この「Bla」オブジェクトは、「Bla2」タイプのオブジェクトを保持します。

public class Bla {
    private Bla2 bla = new Bla2();
    public Bla2 getBla() {
        return bla;
    }
    public void setBla(Bla2 bla) {
        this.bla = bla;
    }
}

さて、私の問題は、クライアント側から「Bla2」クラスにアクセスできないことです。(メソッド「getBla()」すら存在しない)

EndPoint クラスに「Bla2」オブジェクトを返す 2 番目のメソッドを作成することで、なんとかそれをだますことができました。

public Bla2 foo2()
    {
        return new Bla2();
    }

クライアント側で「Bla2」クラスを使用できるようになりましたが、「Bla.getBla()」メソッドはまだ終了しません。それを行う正しい方法はありますか?

4

2 に答える 2

1

これは「正しい」方法ではありませんが、エンドポイントを使用しているからといって、すべてのエンティティに対してエンドポイントの方法に固執する必要はないことに注意してください。

あなたと同じように、私は GAE/J とクラウド エンドポイントを使用しており、ANDroid クライアントを持っています。すべてのプロジェクト間でコードを共有できるため、クライアントとサーバーの両方で Java を実行できるのはすばらしいことです。

私のエンティティのいくつかは、あなたがしているように、通常の「エンドポイントの方法」で伝達され、共有されています。しかし、他のエンティティについてはまだ JSON を使用していますが、それらを文字列に貼り付け、汎用エンドポイントを介して送信し、反対側で逆シリアル化するだけです。これは、エンティティ クラスが共有コードにあるため簡単です。

これにより、単一のエンドポイントを介して 50 の異なるエンティティ タイプを送信でき、それらのエンティティの JSON シリアライズ/デシリアライズを簡単にカスタマイズできます。

もちろん、このソリューションでは、iOS または Web (GWT を使用しない場合) クライアントを追加することを決定した場合に問題が発生しますが、それは重要ではないかもしれません。

(編集 - 実装の詳細を追加)

JSON との間で Java オブジェクト (またはエンティティ) をシリアル化するのは非常に簡単ですが、詳細は使用する JSON ライブラリによって異なります。エンドポイントは、クライアントで Jackson または GSON のいずれかを使用できます。しかし、私自身の JSON には、Android に組み込まれており、簡単にダウンロードして GAE プロジェクトに追加できる json.org を使用しました。

これは誰かが公開したばかりのチュートリアルです:
http://www.survivingwithandroid.com/2013/10/android-json-tutorial-create-and-parse.html

次に、次のようなエンドポイントを追加しました。

@ApiMethod(name = "sendData")
public void sendData( @Named("clientId") String clientId, String jsonObject )

(または、文字列のリストを含むクラスを持つもので、1 つの要求で複数のエンティティを送信できます。)

そして、JSON をデシリアライズする必要があるエンティティをサーバーに伝える要素を JSON に入れます。

于 2013-10-23T16:57:52.323 に答える
0

@ApiResourcePropertyフィールドで使ってみてください。

于 2014-05-13T11:49:37.767 に答える