- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了 Call<T>
的自定义实现,这里是没有自定义代码的自定义类,只是前向代码给你看。
public class CachedCall<T> implements Call<T> {
private final Call<T> delegate;
public CachedCall(Call<T> delegate) {
this.delegate = delegate;
}
@Override
public Response<T> execute() throws IOException {
return delegate.execute();
}
@Override
public void enqueue(Callback<T> callback) {
delegate.enqueue(callback);
}
public void enqueueWithCache(final CachedCallback<T> callback) {
delegate.enqueue(callback);
}
@Override
public boolean isExecuted() {
return delegate.isExecuted();
}
@Override
public void cancel() {
delegate.cancel();
}
@Override
public boolean isCanceled() {
return delegate.isCanceled();
}
@Override
public Call<T> clone() {
return new CachedCall<>(delegate.clone());
}
@Override
public Request request() {
return delegate.request();
}
}
然后在我的 ApiService 中,我在某些调用中使用了此自定义实现,在其他调用中使用了默认实现,例如:
public interface APIService {
@GET("categories")
Call<List<Categorie>> categories(@Query("tag") String tag);
@GET("categories/{categorie}/quotes")
CachedCall<List<Gif>> gifs(@Path("categorie") String categorie);
当调用自定义方法时,我发生了崩溃:
Caused by: java.lang.IllegalArgumentException: Could not locate call adapter for CustomClass.
Tried:
* retrofit2.adapter.rxjava.RxJavaCallAdapterFactory
* retrofit2.ExecutorCallAdapterFactory
at retrofit2.Retrofit.nextCallAdapter(Retrofit.java:237)
at retrofit2.Retrofit.callAdapter(Retrofit.java:201)
at retrofit2.ServiceMethod$Builder.createCallAdapter(ServiceMethod.java:232)
... 21 more
我需要在某处使用 Retrofit 注册我的自定义实现吗?
最佳答案
我已经解决了我自己的问题。
您需要创建并注册自己的CallAdapter.Factory:
public class CachedCallAdapterFactory extends CallAdapter.Factory {
final Executor callbackExecutor;
public CachedCallAdapterFactory(Executor callbackExecutor) {
this.callbackExecutor = callbackExecutor;
}
@Override
public CallAdapter<Call<?>> get(final Type returnType, final Annotation[] annotations, final Retrofit retrofit) {
if (getRawType(returnType) != CachedCall.class) {
return null;
}
final Type responseType = getParameterUpperBound(0, (ParameterizedType) returnType);
return new CallAdapter<Call<?>>() {
@Override public Type responseType() {
return responseType;
}
@Override public <R> Call<R> adapt(Call<R> call) {
return new CachedCall<>(callbackExecutor, call, responseType, retrofit, annotations);
}
};
}
}
然后在创建 Retrofit 实例时注册它:
retrofit = new Retrofit.Builder()
.client(client)
.baseUrl(URL)
.addCallAdapterFactory(new CachedCallAdapterFactory(new DefaultExecutor()))
.build();
您的DefaultExecutor
只需运行其Runnable
private class DefaultExecutor implements Executor {
@Override
public void execute(@NonNull Runnable runnable) {
runnable.run();
}
}
关于java - 改造:由以下原因引起:java.lang.IllegalArgumentException:无法找到 CustomClass 的调用适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40216070/
所以我正在学习 C++ 的基础知识并且我有这个自定义类 class DataBook{ private: vector dataList; PersonData* numList[10
这些列表之间有什么区别。 ArrayList test = new ArrayList(); ArrayList test2= new ArrayList(); 或者在这两类之间。 class tes
晚上好(取决于你现在在哪里)。我对排序集的 STL 东西有点困惑......我想在我的集合中存储自定义类的指针,我希望它们由我自己排序标准,而不仅仅是指针大小。 有人知道如何做到这一点吗?既然不可能像
我无法理解为什么在下面的示例中,自定义类列表(response.results 和 results)充满了 LinkedHashMap。我预计在解析 JSON 输入流后,列表将充满自定义类,其类成员包
我添加了一个新类 TopicNew 并在 flutter_livestream_provider 中的示例代码中运行 flutter pub run build_runner build --dele
使用 Groovy Binding 从主 Controller 执行脚本并尝试传递自定义对象,我收到标题中提到的错误。 Caught: org.codehaus.groovy.runtime.type
我有以下一段代码可以搜索 std::map 类型的 map .如果在 map 中找不到该项目,我想返回一个“失败”案例对象。 我在 Returning a “NULL reference” in C+
我创建了一个类“Node”来包含一堆数据。我正在尝试列出此类的相同类型。我在尝试使用 push_back() 或任何其他函数时遇到错误。 错误如下:"/home/.../FIFO.cpp|61|错误:
我正在编写一个插件,并且已经构建了一些自定义类。到目前为止,我编写所有内容的方式(大约 1000 行),使用列表是存储类实例的最方便的方法,因此我在主类的顶部有几行,例如 public List Jo
我有一个自定义类“学生”,它有两个属性“姓名”和“年龄”。在我的主要方法中,我创建了这个自定义类 List 的列表,并将 4 个 Student 对象添加到列表中。我的问题是,如何使用对象的任何属性获
我在 main.storyboard 上创建了一个新的 View 控件。现在我想将该 View 链接到我创建的自定义类(在我的示例中为 SceneViewController)。但是当我尝试使用右上角
已经有一个类似的question但它似乎并没有询问问题所暗示的情况。 用户询问列表中的自定义类,但他的列表对象是字符串类型。 我有一个包含 Bars 列表的 Foo 类: public cla
你好,我想做的是以编程方式创建一个 spriteNode 并为其分配一个类。这样我就可以轻松管理节点特性,例如自定义级别、枪支、生命值等......这就是我尝试做到这一点的方法。 let player
所以我有三个类(class): 实验室 学生 考试 我需要输入学生的 ID,将 Exam 类的考试添加到具有 Exam 类型的 Treeset 中,所有这些都在 Student 类中。 完成此操作后,
我试图通过跨越 IEnumerable 数据行和自定义类之间的公共(public)字段来找到获取对象列表的方法。 我加载数据集并使用 DataSetExtensions 程序集将其转换为 IEnume
如何使用反射创建带有自定义类 (List) 的通用列表?我需要能够添加值并使用propertyInfo.SetValue(..., ..., ...) 来存储它。将这些 List<> 存储为其他数据结
我有一个这样的闭包/ block typealias TableViewConfigureBlock = (AnyObject?, AnyObject?) -> Void 它有两个参数:细胞对象和模型
我为 UIButton 创建了一个自定义类,但在小屏幕设备中,例如iPhone 5s cornerRadius 无法正常工作 你必须仔细观察才能看到 UiButton 的 cornerRadius 不
我有一组自定义类 [CustomClass]。我正在尝试将其转换为 [AnyObject]。 self.customClassArray = self.anyObjectArray as [AnyOb
这是我的界面: interface DialogOkClickListener { fun onDialogOkClick() } 这是我的点击监听器 fun setOkClickListen
我是一名优秀的程序员,十分优秀!