これは私のUserServiceインターフェースです
@GET(Constants.Api.URL_LOGIN)
String loginUser(@Field("email") String email, @Field("password") String pass, @Field("secret") String secret, @Field("device_id") String deviceid, @Field("pub_key") String pubkey, @Field("device_name") String devicename);
私が呼んでいる活動で
retrofit = new Retrofit.Builder()
.baseUrl(Constants.Api.URL_BASE)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
service = retrofit.create(UserService.class);
String status = service.loginUser(loginedt.getText().toString(), passwordedt.getText().toString(), secret, device_id, pub_key, device_name);
これは例外を作成します
Java.lang.IllegalArgumentException: Unable to create call adapter for class Java.lang.String
for method UserService.loginUser
私は何が間違っているのですか?
Gradle:
compile 'com.squareup.retrofit:retrofit:2.+'
compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta1'
compile 'com.squareup.retrofit:converter-gson:2.0.0-beta1'
addCallAdapterFactory(RxJavaCallAdapterFactory.create())
を含めたので、Observable
を使用して通話を管理しようとしています。インターフェースで、Observable
の代わりにパラメーター化されたCall
を明示的に指定します-
@GET(Constants.Api.URL_LOGIN)
Observable<String> loginUser(@Field("email") String email, @Field("password") String pass, @Field("secret") String secret, @Field("device_id") String deviceid, @Field("pub_key") String pubkey, @Field("device_name") String devicename);
次に、service
メソッドは、サブスクライブしたり、監視可能なパイプラインの開始として使用したりできる監視可能なものを作成します。
Observable<String> status = service.loginUser(loginedt.getText().toString(), passwordedt.getText().toString(), secret, device_id, pub_key, device_name);
status.subscribe(/* onNext, onError, onComplete handlers */);
Aleksei、Retrofitライブラリから文字列の結果を取得するための最も簡単なソリューションが必要な場合は、次のいくつかの呼び出しを行う必要があります。
最初は、Gradleの依存関係:
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'
変更したUserServiceインターフェイス
@GET(Constants.Api.URL_LOGIN)
Call< String> loginUser(@Field("email") String email, @Field("password") String pass, @Field("secret") String secret, @Field("device_id") String deviceid, @Field("pub_key") String pubkey, @Field("device_name") String devicename);
サービスクライアント作成コード:
static UserService SERVICE_INSTANCE = (new Retrofit.Builder()
.baseUrl(Constants.Api.URL_BASE)
.addConverterFactory(ScalarsConverterFactory.create())
.build()).create(UserService.class);
リクエストの呼び出し:
SERVICE_INSTANCE.loginUser(*all your params*).execute().body();
解決策が明確で、単純な文字列受信アプローチを示していることを願っています。別のデータパーサーが必要な場合は、こちらのコンバーターリストをご覧ください Retrofit CONVERTERS 。