私は次のApiから応答を得ようとしています。
https://api.github.com/users/username
しかし、String
name__として解析して取得するためにString
name__を使用できるように、JSONObject
name__として応答を取得する方法はわかりません。
使用した後付けバージョン:
後付け:2.0.0-beta1
私は今までこれを試してみました:
public interface GitHubService {
@GET("/users/{user}")
public String listRepos(@Path("user") String user,Callback<String> callback);
}
取得中:
GitHubService service = retrofit.create(GitHubService.class);
service.listRepos("username", new Callback<String>() {
@Override
public void onResponse(Response response) {
System.out.println(response.toString());
}
@Override
public void onFailure(Throwable t) {
}
});
例外:
Caused by: Java.lang.IllegalArgumentException: Could not locate call adapter for class Java.lang.String. Tried:
* retrofit.ExecutorCallAdapterFactory
at retrofit.Utils.resolveCallAdapter(Utils.Java:67)
at retrofit.MethodHandler.createCallAdapter(MethodHandler.Java:49)
どんな助けでも本当に感謝されるでしょう。
**更新**以下の私の元の答えより少ない儀式でString
応答を可能にするスカラ変換器が後付けに追加されました。
サンプルインターフェース -
public interface GitHubService {
@GET("/users/{user}")
Call<String> listRepos(@Path("user") String user);
}
レトロフィットビルダーにScalarsConverterFactory
を追加します。 注:ScalarsConverterFactory
および他のファクトリを使用している場合は、最初にスカラファクトリを追加します。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(ScalarsConverterFactory.create())
// add other factories here, if needed.
.build();
あなたはまたあなたのgradleファイルにスカラーコンバーターを含める必要があるでしょう -
implementation 'com.squareup.retrofit2:converter-scalars:2.1.0'
---オリジナルの回答(まだ動作します、もっと多くのコード)---
私は@CommonsWareに同意します。あなたがJSONを自分で処理する要求を傍受したいのはちょっと変だと思います。ほとんどの場合POJOはあなたが必要とするすべてのデータを持っているので、JSONObject
の土地にいじわる必要はありません。 JSONを操作する必要がある場合は、カスタムgson TypeAdapter
またはレトロフィット Converter
を使用して、特定の問題を解決することをお勧めします。しかし、retrofitはGsonを介した単なるJSON構文解析を提供します。また、REST要求に関連する面倒なその他の多くのタスクも管理します。あなたがこれらの機能の1つを使いたくないという理由だけで、あなたが全部を捨てなければならないというわけではありません。あなたが生のストリームを取得したい時があるので、ここにそれを行う方法があります -
まず、Retrofit 2を使用している場合は、Call
APIの使用を開始する必要があります。変換するオブジェクトをtypeパラメータとして送信する代わりに、okhttpのResponseBody
を使用します -
public interface GitHubService {
@GET("/users/{user}")
Call<ResponseBody> listRepos(@Path("user") String user);
}
それからあなたはあなたの呼び出しを作成し実行することができます -
GitHubService service = retrofit.create(GitHubService.class);
Call<ResponseBody> result = service.listRepos(username);
result.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Response<ResponseBody> response) {
try {
System.out.println(response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Throwable t) {
e.printStackTrace();
}
});
注上記のコードでは、応答オブジェクトに対してstring()
を呼び出します。これにより、応答全体がStringに読み込まれます。ストリームを取り込むことができるものに本体を渡す場合は、代わりにcharStream()
を呼び出すことができます。 ResponseBody
のドキュメントを参照してください。