java - 改造可空参数映射

标签 java android retrofit2

我有改造的接口(interface)

interface ApiInterface {

    @GET
    Observable<okhttp3.ResponseBody> get(@Url String url,
                                         @HeaderMap Map<String, Object> headerMap,
                                         @QueryMap HashMap<String, String> queryMap );
}

我这样调用,效果很好

HashMap<String, String> map = new HashMap<String, String>();
map.put("id","xyz");
apiInterface.get(url,  getHeader(),map)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread());

但是当我传递null时,它不起作用

return apiInterface.get(url,  getHeader(),null)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread());

如何通过 null 来改造接口(interface)?

最佳答案

你基本上不能传递 null 。两种可能的解决方案。

  1. 要么使用一个空的 HashMap<>

          new HashMap<>()
    
  2. 编写另一个没有该字段的 api 调用,如下所示。

接口(interface) ApiInterface {

@GET
Observable<okhttp3.ResponseBody> get(@Url String url,
                                     @HeaderMap Map<String, Object> headerMap,
                                     @QueryMap HashMap<String, String> queryMap );

接口(interface) ApiInterface {

@GET
Observable<okhttp3.ResponseBody> get(@Url String url,
                                     @QueryMap HashMap<String, String> queryMap );

您可以在此处找到更多详细信息: https://github.com/square/retrofit/issues/1488 (顺便说一句,这不是我的帖子)

关于java - 改造可空参数映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52966755/

相关文章:

java - 对于 Android 上长时间运行的网络进程,我有哪些选择?

java - 在 Dropwizard 中注册事件监听器

包含 'hole' 的 Android View

android - 使用 JNI 和 NDK 旋转位图

javascript - 改造成功方法的空响应

java子类或字段,良好的语义

java - 如何处理超过3000位的数字?

java - 如何在android中将特定的用户代理与(神奇的)ExoPlayer一起使用?

kotlin - java.lang.IllegalStateException :JSON OBJECT and JSON ARRAY when parsing Json using GSON

retrofit - 在每次调用 Retrofit 时获取对象