2015-09-05 57 views
8

这是我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 

我在做什么错误?

摇篮:

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' 

回答

13

既然你已经包括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 */); 
0

阿列克谢,如果你需要最简单的解决方案,从改造图书馆中得到字符串结果,比你这样做有几个电话:

  1. 起初,摇篮依赖条件:

    compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' 
    compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4' 
    
  2. 你修改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); 
    
  3. 服务客户端创建代码:

    static UserService SERVICE_INSTANCE = (new Retrofit.Builder() 
         .baseUrl(Constants.Api.URL_BASE) 
         .addConverterFactory(ScalarsConverterFactory.create()) 
         .build()).create(UserService.class);  
    
  4. 调用请求:

    SERVICE_INSTANCE.loginUser(*all your params*).execute().body(); 
    

我希望,解决的办法是明确的,并显示简单的String接受的办法。如果你需要另外一个数据解析器,请看这里的转换列表Retrofit CONVERTERS