改造可为空参数映射

Ras*_*iri 3 java android retrofit2

我有改造接口

interface ApiInterface {

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

我这样调用,它完美地工作

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

但是当我通过时null,它不起作用

return apiInterface.get(url,  getHeader(),null)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread());
Run Code Online (Sandbox Code Playgroud)

如何通过 null 来改造接口?

akh*_*kar 6

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

  1. 要么使用空的 HashMap<>

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

接口 ApiInterface {

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

}

接口 ApiInterface {

@GET
Observable<okhttp3.ResponseBody> get(@Url String url,
                                     @QueryMap HashMap<String, String> queryMap );
Run Code Online (Sandbox Code Playgroud)

}

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