Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么在Get请求中添加查询参数?_Android_Retrofit2 - Fatal编程技术网

Android 为什么在Get请求中添加查询参数?

Android 为什么在Get请求中添加查询参数?,android,retrofit2,Android,Retrofit2,我对android非常陌生,我正在研究网络改造2,以发送“为什么我们要使用查询参数?”改造使用注释将定义的键和值转换为适当的格式。使用@Query(“key”)字符串值注释将向请求url添加一个带有name key和相应字符串值的查询参数(当然,您可以使用除String:)以外的其他类型) 实际上,有些API具有端点,允许您传递(可选)多个查询参数。您希望避免像下面这样的服务方法声明,并为请求参数提供“无止境”选项: public interface NewsService() {

我对android非常陌生,我正在研究网络改造2,以发送“为什么我们要使用查询参数?”

改造使用注释将定义的键和值转换为适当的格式。使用@Query(“key”)字符串值注释将向请求url添加一个带有name key和相应字符串值的查询参数(当然,您可以使用除String:)以外的其他类型)

实际上,有些API具有端点,允许您传递(可选)多个查询参数。您希望避免像下面这样的服务方法声明,并为请求参数提供“无止境”选项:

public interface NewsService() {  
    @GET("/news")
    Call<List<News>> getNews(
            @Query("page") int page,
            @Query("order") String order,
            @Query("author") String author,
            @Query("published_at") Date date,
            …
    );
}
公共接口新闻服务(){
@获取(“/新闻”)
打电话给getNews(
@查询(“页面”)整型页面,
@查询(“订单”)字符串顺序,
@查询(“作者”)字符串作者,
@查询(“发布日期”)日期,
…
);
}
您可以使用每个参数的null值调用.getNews服务方法,使其成为可选的。改型将忽略空值,并且不会将它们映射为查询参数。但是,有一个更好的解决方案可以处理具有各种查询参数选项的复杂API端点。别担心,改型会帮你的

您可以从以下给定链接了解更多信息:-


改型使用注释将定义的键和值转换为适当的格式。使用@Query(“key”)字符串值注释将向请求url添加一个带有name key和相应字符串值的查询参数(当然,您可以使用除String:)以外的其他类型)

实际上,有些API具有端点,允许您传递(可选)多个查询参数。您希望避免像下面这样的服务方法声明,并为请求参数提供“无止境”选项:

public interface NewsService() {  
    @GET("/news")
    Call<List<News>> getNews(
            @Query("page") int page,
            @Query("order") String order,
            @Query("author") String author,
            @Query("published_at") Date date,
            …
    );
}
公共接口新闻服务(){
@获取(“/新闻”)
打电话给getNews(
@查询(“页面”)整型页面,
@查询(“订单”)字符串顺序,
@查询(“作者”)字符串作者,
@查询(“发布日期”)日期,
…
);
}
您可以使用每个参数的null值调用.getNews服务方法,使其成为可选的。改型将忽略空值,并且不会将它们映射为查询参数。但是,有一个更好的解决方案可以处理具有各种查询参数选项的复杂API端点。别担心,改型会帮你的

您可以从以下给定链接了解更多信息:-


假设您要调用以下api:

因此,要动态传递“api_key”的值,应使用@Query(“api_key”)作为:

@GET(“电影/正在播放”)
调用getMovieData(@Query(“api_key”)字符串apiKey);

假设您要调用以下api:

因此,要动态传递“api_key”的值,应使用@Query(“api_key”)作为:

@GET(“电影/正在播放”)
调用getMovieData(@Query(“api_key”)字符串apiKey);

无需随GET请求发送查询参数。这与在您试图使用的API上如何配置端点有关

在设计API(尤其是GET方法)时,可以通过将某些参数指定为查询参数来保持其可选性

@获取(“位置”) 响应getUser(@QueryParam(“name”)字符串名)

两者都可以称之为

/位置

/位置?名称=测试

查询参数不仅仅限于GET请求。它也可以与其他方法一起使用,例如删除等


这是一个与HTTP方法相关的概念

不需要使用GET请求发送查询参数。这与在您试图使用的API上如何配置端点有关

在设计API(尤其是GET方法)时,可以通过将某些参数指定为查询参数来保持其可选性

@获取(“位置”) 响应getUser(@QueryParam(“name”)字符串名)

两者都可以称之为

/位置

/位置?名称=测试

查询参数不仅仅限于GET请求。它也可以与其他方法一起使用,例如删除等


这是一个与HTTP方法相关的概念

,因此这里有一个简单的方法来帮助那些可能想要使用改型查询的人理解它。请检查以下内容

  • 如果指定@GET(“Search?one=5”),那么任何@Query(“two”)都必须使用&来追加,从而生成类似Search?one=5&two=7的内容
  • 如果指定@GET(“Search”),则必须使用?追加第一个@Query,生成类似Search?two=7的内容
  • 这就是改造的工作原理
  • 当您指定@GET(“Search?”)时,改型会认为您已经给出了一些查询参数,并使用&添加更多查询参数。 删除?,您将获得所需的结果

    enter String BASE_URL = "https://api.test.com/";
    String API_KEY = "SFSDF24242353434";
    
    @GET("Search") //i.e https://api.test.com/Search?
    Call<Products> getProducts(
    @Query("one") String one, 
    @Query("two") String two,    
    @Query("key") String key
    )
    
    输入字符串BASE\u URL=”https://api.test.com/";
    字符串API_KEY=“SFSDF242353434”;
    @获取(“搜索”)//即https://api.test.com/Search?
    呼叫getProducts(
    @查询(“一”)字符串一,
    @查询(“二”)字符串二,
    @查询(“键”)字符串键
    )
    
结果:

所以这里有一个简单的方法,可以让那些可能想使用改型查询的人理解它。请检查以下内容

  • 如果指定@GET(“Search?one=5”),那么任何@Query(“two”)都必须使用&来追加,从而生成类似Search?one=5&two=7的内容
  • 如果指定@GET(“Search”),则必须使用?追加第一个@Query,生成类似Search?two=7的内容
  • 这就是改造的工作原理
  • 当您指定@GET(“Search?”)时,改型会认为您已经给出了一些查询参数,并使用&添加更多查询参数。 删除?,您将获得所需的结果

    enter String BASE_URL = "https://api.test.com/";
    String API_KEY = "SFSDF24242353434";
    
    @GET("Search") //i.e https://api.test.com/Search?
    Call<Products> getProducts(
    @Query("one") String one, 
    @Query("two") String two,    
    @Query("key") String key
    )
    
    输入字符串BASE\u URL=”https://api.test.com/";
    字符串API_KEY=“SFSDF242353434”;
    @获取(“搜索”)//即https://api.test.com/Search?
    呼叫getProducts(
    @