改造可为空的参数图

时间:2018-10-24 10:33:13

标签: java android retrofit2

我有用于改装的界面

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 个答案:

答案 0 :(得分:1)

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

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

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

接口ApiInterface {

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

}

接口ApiInterface {

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

}

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

答案 1 :(得分:-1)

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

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