代码之家  ›  专栏  ›  技术社区  ›  Rasoul Miri

改装可空参数映射

  •  0
  • Rasoul Miri  · 技术社区  · 6 年前

    我有改装的接口

    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?

    2 回复  |  直到 6 年前
        1
  •  6
  •   akhilsreekar    6 年前

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

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

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

    }

    接口API接口{

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

    }

    您可以在此处找到更多详细信息: https://github.com/square/retrofit/issues/1488

        2
  •  -1
  •   karan    6 年前

    如果不想向请求参数发送任何值,可以传递空映射。使用以下代码。

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