【问题标题】:How can I extend a Retrofit 2.0 Call?如何扩展 Retrofit 2.0 调用?
【发布时间】:2016-05-19 13:23:17
【问题描述】:

我想实现这样的目标:

MyCall<MyResponse> call = service.login(loginRequest);

call.enqueue(
    new Runnable() {
        @Override
        public void run() {
            // onResponse
            }
        }, new Runnable() {
            @Override
            public void run() {
                // onFailure
            }
    });

这样当我必须拨打电话时,我不需要在每个回调中解析响应,并且代码更轻巧且可重用。

我尝试了this snippet 的代码,但我得到了错误:

无法为 XXXX 创建呼叫适配器。

我错过了什么?

【问题讨论】:

    标签: retrofit


    【解决方案1】:

    我没有扩展Call,但我扩展了Callback,这也有助于使the code is a little lighter and reusable.

    public abstract class CustomCallback<T> implements Callback<T> {
    
        @Override
        public void onResponse(final Response<T> response, Retrofit retrofit) {
            Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    onRequestSuccess(response);
                }
            };
            runnable.run();
        }
    
        @Override
        public void onFailure(final Throwable t) {
            Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    onRequestFail(t);
                }
            };
            runnable.run();
    
        }
    
        public abstract void onRequestSuccess(Response<T> response);
    
        public abstract void onRequestFail(Throwable t);
    
    }
    

    那么当你打电话给enqueue():

    call.enqueue(new CustomCallback<YourObject>() {
                @Override
                public void onRequestSuccess(final Response<YourObject> response)
                {
                }
    
                @Override
                public void onRequestFail(final Throwable t) {
    
                }
            });
    

    希望对你有帮助

    【讨论】:

    • 这正是我想要的。带有改造 2 的代码有点不同,但它的工作原理就像一个魅力。
    【解决方案2】:

    如果您指的是 Jake Wharton 帖子下方的 sn-p,那么问题应该是您包含对 RxJavaCallAdapterFactory.create() 的调用,并且您的调用接口不是可观察的。所以删除那行。

    【讨论】:

    • 感谢您的回答!是的,这是我尝试过的第一件事,但我仍然有同样的错误。我是改装新手,所以我仍在努力解决它。
    猜你喜欢
    • 1970-01-01
    • 2018-02-13
    • 2016-05-09
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    相关资源
    最近更新 更多