Ceci est mon interface utilisateur
@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);
Dans l'activité que j'appelle
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);
Cela crée une exception
Java.lang.IllegalArgumentException: Unable to create call adapter for class Java.lang.String
for method UserService.loginUser
Qu'est-ce que je fais mal?
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'
Puisque vous avez inclus addCallAdapterFactory(RxJavaCallAdapterFactory.create())
, vous envisagez d’utiliser Observable
pour gérer vos appels. Dans votre interface, donnez explicitement la Observable
paramétrée au lieu d'une 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);
et vos méthodes service
créent ensuite des observables auxquels vous pouvez vous abonner ou les utiliser comme point de départ d'un pipeline observable.
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, si vous avez besoin de la solution la plus simple pour obtenir le résultat String de la bibliothèque Retrofit, vous devez effectuer plusieurs appels:
Au début, Gradle dépendecies:
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'
Votre interface utilisateur modifiée
@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);
Code de création du client de service:
static UserService SERVICE_INSTANCE = (new Retrofit.Builder()
.baseUrl(Constants.Api.URL_BASE)
.addConverterFactory(ScalarsConverterFactory.create())
.build()).create(UserService.class);
Appeler la demande:
SERVICE_INSTANCE.loginUser(*all your params*).execute().body();
J'espère que la solution est claire et montre une approche simple de réception de chaîne. Si vous avez besoin d’un autre analyseur de données, consultez la liste des convertisseurs ici Retrofit CONVERTERS .