Retrofit не удается создать адаптер вызова
Это мое приложение 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'
2 ответов
так как вы включили 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 */);
Алексей, Если вам нужно самое простое решение, чтобы получить результат строки из библиотеки Retrofit, то вам нужно сделать это несколько вызовов:
-
во-первых, Gradle dependecies:
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();
Я надеюсь, что решение clear и показывает простой подход получения строки. Если вам нужен еще один анализатор данных, пожалуйста, взгляните на список конвертеров здесь модифицированные преобразователи.