0

Retrofit を使用してリクエストを送信し、レスポンスを使用できるようにしようとしています。

サービスはこのようなjsonを返します

  {
     "code" : 0,
     "msg"  : "User received",
     "data" : {
         "name" : "x",
         "tags" : [ "a", "b", "c" ]
     }
   }

構造 (コード、メッセージ、およびデータ) は同じですが、データ内に何が入るかは異なります。この例では、User クラスにマップする必要があります。他の呼び出しでは、投稿のリストなどを返します。エラーが発生した場合、データ コンポーネントはなく、代わりにエラー プロパティがあります。

私は、Response タイプの特定のサブクラスを持ち、それを使用するように Retrofit にヒントを与えることができると思いました。

public class Response {
  int code;
  String msg;
}

public class UserResponse extends Response {
  User data;
}

しかし、戻り値にデータ要素がない場合、アクションを実行するとプログラムが単に壊れます。

4

1 に答える 1

0

code および msg プロパティがデバッグに使用されている場合は、com.retrofit.converter.Convert を実装できます ;) たとえば、Gson を使用して json を Java 型に変換します。サブの JsonElement "data" を fromBody メソッドの gson パラメータとして取得します (public Object fromBody(TypedInput body, Type type) throw ConversionException)。

return gson.fromJson(theDataJsonElement, type);

そしてもちろん、コンバーターをアダプターに設定することを忘れないでください

restAdapter.setConverter(new YourImplementedConverter());
于 2014-03-04T10:16:58.723 に答える