【问题标题】:Retrofit2 no key name on URL parameterRetrofit2 在 URL 参数上没有键名
【发布时间】:2020-03-04 12:13:51
【问题描述】:

我正在使用 Retrofit2

我需要简单地询问 api http://1.1.1.1/get?key=value1&value2

我怎样才能获得只有值的查询?作为上面例子中的 value2? 我试过像这里: Retrofit no key name on URL parameter

  • 改造变更?签到 %3F。
  • @Query("") 会做这样的事情 &=value2
  • @QueryMap("") 具有空值将类似于 &value2=

有什么想法吗?

【问题讨论】:

    标签: android http get retrofit2


    【解决方案1】:

    这种情况下可以直接调用整个URL。

    @GET()
    Call<ResponseVO> test(@Url() String url);
    

    然后调用

    test("http://1.1.1.1/get?key=value1&value2")
    

    【讨论】:

      【解决方案2】:

      用最新版Retrofit2 @QueryName

      @GET("http://1.1.1.1/get")
      Call<Object> getYourData(@Query("key") String key, @QueryName String value);
      

      当您调用该方法时,每个查询名称都会附加到 URL。您可以在此处查看 JavaDoc:https://square.github.io/retrofit/2.x/retrofit/retrofit2/http/QueryName.html

      【讨论】:

        【解决方案3】:

        请将查询参数值value1&value2编码成value1%26value2 like

        http://1.1.1.1/get?key=value1&value2
        

        http://1.1.1.1/get?key=value1%26value2
        

        当你进来时

        @GET("http://1.1.1.1/get?")
        Call<Object> getYourData(@Query("key") String value);
        

        【讨论】:

        • 不管编码与否都不要把 %26 改成 & 而且如果没有编码,它会把 % 改成 %25,所以我们会有 %2526 :)
        【解决方案4】:
        @GET("http://1.1.1.1/get?key=value")
        Call<Object> getYourData(@Query("value") String value);
        

        然后,当您调用“getYourData”时,只需将您的 value1 和 value2 放在单独的字符串中并将它们连接起来,然后将新字符串传递给“getYourData”方法。

        P.S 在合并两个字符串时不要忘记这个符号“&”。

        【讨论】:

        • 不起作用 - 无论编码与否,& 都更改为 %26
        • 这个api是你做的吗?
        • 我猜你这样做了,正确的方法是这样做:1.1.1.1/get/?key1=value1 & key2=value2
        猜你喜欢
        • 2015-11-27
        • 2018-06-19
        • 1970-01-01
        • 2021-08-24
        • 2016-08-20
        • 1970-01-01
        • 2019-02-14
        • 2015-09-05
        • 2019-08-05
        相关资源
        最近更新 更多