2015-11-26 55 views
0

我正在写一个改造演示。 我必须使用“https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code”来获取代码。应用网址进行改造

写作休息的时候,我不喜欢这样写道:

public interface WXService { 

    @GET("/access_token?grant_type=authorization_code") 
    Observable<AccessTokenModel> getAccessToken(@Query("appid") String appId, 
              @Query("secret") String secretId, 
              @Query("code") String code); 

} 


public class WXRest { 
    private static final String WXBaseUrl = "https://api.weixin.qq.com/sns/oauth2/"; 
    private WXService mWXService; 

    public WXRest() { 
     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(WXBaseUrl) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 

     mWXService = retrofit.create(WXService.class); 
    } 

    public void getAccessToken(String code) { 
     mWXService.getAccessToken(Constants.APP_ID, Constants.SECRET_ID, code) 
     .subscribeOn(Schedulers.io()) 
     .observeOn(AndroidSchedulers.mainThread()) 
     .subscribe(new Action1<AccessTokenModel>() { 
      @Override 
      public void call(AccessTokenModel accessTokenModel) { 
       Log.e("WX", "accessToken:" + accessTokenModel.accessToken); 
      } 
     }); 
    } 

} 

,但我得到了一个错误:

java.lang.IllegalArgumentException: Unable to create call adapter for rx.Observable

我认为这是我改造URL的方式wrong.But我不知道如何解决它。

+0

它可能是监守您使用/两'WXBaseUrl'和'@ GET',删除'/'的GET请求开始像这样'@GET(“access_token?grant_type = authorization_code”)' –

+0

我试过了。但它不起作用。 –

+0

尝试在您的API服务中调用 getAccessToken(....);' –

回答

2

我认为你应该在你的gradle依赖项中包含adapter-rxjava lib。

compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta1' 

,然后调用适配器工厂添加到您的改造建设者

public WXRest() { 
     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(WXBaseUrl) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
       .build(); 

     mWXService = retrofit.create(WXService.class); 
    }