当前位置: 首页 > 面试题库 >

无法为类示例创建呼叫适配器。简单

罗昱
2023-03-14
问题内容

我正在使用SimpleXml改造2.0.0-beta1。我想从REST服务中检索简单(XML)资源。使用SimpleXML编组/解组Simple对象可以正常工作。

使用此代码(转换为2.0.0之前的代码)时:

final Retrofit rest = new Retrofit.Builder()
    .addConverterFactory(SimpleXmlConverterFactory.create())
    .baseUrl(endpoint)
    .build();
SimpleService service = rest.create(SimpleService.class);
LOG.info(service.getSimple("572642"));

服务:

public interface SimpleService {

    @GET("/simple/{id}")
    Simple getSimple(@Path("id") String id);

}

我得到这个异常:

Exception in thread "main" java.lang.IllegalArgumentException: Unable to create call adapter for class example.Simple
    for method SimpleService.getSimple
    at retrofit.Utils.methodError(Utils.java:201)
    at retrofit.MethodHandler.createCallAdapter(MethodHandler.java:51)
    at retrofit.MethodHandler.create(MethodHandler.java:30)
    at retrofit.Retrofit.loadMethodHandler(Retrofit.java:138)
    at retrofit.Retrofit$1.invoke(Retrofit.java:127)
    at com.sun.proxy.$Proxy0.getSimple(Unknown Source)

我想念什么?我知道用Call作品包装返回类型。但是我希望服务将业务对象作为类型返回(并在同步模式下工作)。

更新

添加了额外的依赖关系并.addCallAdapterFactory(RxJavaCallAdapterFactory.create())根据不同的答案提出建议后,我仍然收到此错误:

Caused by: java.lang.IllegalArgumentException: Could not locate call adapter for class simple.Simple. Tried:
 * retrofit.RxJavaCallAdapterFactory
 * retrofit.DefaultCallAdapter$1

问题答案:

简短的答案:返回Call<Simple>您的服务界面。

看起来Retrofit 2.0正在尝试寻找一种为服务接口创建代理对象的方法。它希望您编写以下代码:

public interface SimpleService {
    @GET("/simple/{id}")
    Call<Simple> getSimple(@Path("id") String id);
}

但是,当您不想返回时,它仍然希望表现出色并且保持灵活性Call。为了支持这一点,它具有a的概念,该概念CallAdapter应该知道如何将a调整Call<Simple>为a
Simple

RxJavaCallAdapterFactory仅当您尝试返回时,使用才有用rx.Observable<Simple>

最简单的解决方案是返回CallRetrofit期望的结果。CallAdapter.Factory如果确实需要,也可以编写一个。



 类似资料:
  • 问题内容: 我正在尝试使用rxJava,rxAndroid,Retrofit2和OkHTTP3从URL端点下载文件。我的代码无法为“ Observable <retrofit2.Response <okhttp3.ResponseBody ”创建呼叫适配器。这些方法对我来说是陌生的,因此我认为这里缺少一个重要的概念。任何方向或点将不胜感激。 的android.view.View.performCl

  • 问题内容: 我需要创建一个可处理此类网络呼叫的改造呼叫适配器: 我希望它不使用Kotlin Coroutines 。我已经有了使用的成功实现,它可以处理以下方法: 但是我希望能够使函数成为挂起函数并删除包装器。 使用暂停功能,Retrofit的工作方式就像在返回类型周围有包装器一样,因此被视为 我的实施 我试图创建一个呼叫适配器来尝试解决这个问题。到目前为止,这是我的实现: 厂 适配器 使用此实现

  • 改型异步请求是用两个方法onResponse()和onFailure()回调的。 我还想使用Gson转换器来转换改型响应,然后用APIPesponse包装它。 如果我用like 好像不起作用。不能将json响应数据解析到结果对象中。 有人能帮助如何让用调用enqueue吗?结果是使用Gson转换器解析json数据内容。 有人能帮我指出这个问题吗?

  • 我正在学习使用改型进行api调用,但每当我试图从api发出get请求时,我的应用程序就会崩溃,并出现以下错误。。 Java语言lang.IllegalArgumentException:无法为类java创建调用适配器。方法WeatherApi的lang.对象。getweatherbycity 原因:java。lang.IllegalArgumentException:找不到类java的调用适配器。

  • 适配器目录和文件结构 适配器目录和文件结构布局的例子: /application/libraries/Driver_name Driver_name.php drivers Driver_name_subclass_1.php Driver_name_subclass_2.php Driver_name_subclass_3.php 注意: 为了在大小写敏感的文件系统上维持兼容性,这个 Drive

  • 本文向大家介绍php适配器模式简单应用示例,包括了php适配器模式简单应用示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php适配器模式简单应用。分享给大家供大家参考,具体如下: 适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能