您的位置:首页 > 编程语言 > Java开发

Caused by: java.lang.IllegalArgumentException: Could not locate call adapter for rx.Observable<>错误

2016-08-17 13:52 519 查看
public class TRService {
public static final String BASE_TRC_URL = "http://www.tuling123.com/openapi/";

private static Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_TRC_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();

private TRService() {
}

public static TRApi createTRService() {
return retrofit.create(TRApi.class);
}
}


public interface TRApi {

/**
* 可以看到这里应该是post传递的参数。
* @param key
* @param info
* @param userid
* @return
*/
@FormUrlEncoded
@POST("api")
Observable<TREntity> getTRResponse(@Field("key") String key, @Field("info") String info, @Field("userid") String userid);
}

调用的地方:

private void gainChat(String str) {
service.getTRResponse(Contant.TRC_KEY, str, Contant.TRC_USER_ID)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<TREntity>() {
@Override
public void call(TREntity trEntity) {
if (trEntity != null) {
String str;
if (trEntity.getCode() == 40004) {
str = Contant.TRC_ROBOT_REST;
} else {
str = trEntity.getText();
}
addData(new ChatBean(TRClientAdapter.TYPE_ROBOT, str));
}
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
addData(new ChatBean(TRClientAdapter.TYPE_ROBOT, Contant.TRC_ROBOT_FAILED));
}
});
}

出现如下错误:

Caused by: java.lang.IllegalArgumentException: Could not locate call adapter for rx.Observable<>
要在构建Retrofit时指定适配器模式为RxJavaCallAdapterFactory,修改如下:

public class TRService {
public static final String BASE_TRC_URL = "http://www.tuling123.com/openapi/";

private static Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_TRC_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();

private TRService() {
}

public static TRApi createTRService() {
return retrofit.create(TRApi.class);
}
}

如果没有使用RxJavaCallAdapterFractory,那么使用Retrofit的回调,如下:

public interface TRApi {

/**
* 可以看到这里应该是post传递的参数。
* @param key
* @param info
* @param userid
* @return
*/
@FormUrlEncoded
@POST("api")
Call<TREntity> getTRResponse(@Field("key") String key, @Field("info") String info, @Field("userid") String userid);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐