Android Retrofit Delete请求设置

The previous app process crashed. This is the stack trace of the crash:
    java.lang.IllegalArgumentException: Non-body HTTP method cannot contain @Body.
        for method ApiService.deleteBank1

  @DELETE("api/user/xxx")
    fun deleteBank1(
        @Body params: RequestBody
    ): Observable<BaseResponse<Any>>

刚开始delete请求按Post进行了上面配置,但请求接口时就崩溃报上面错误了:  Non-body HTTP method cannot contain @Body

然后改为如下形式

@DELETE("api/user/xxx")
fun deleteBank(
    @Query("uid") uid: String,
    @Query("number") number: String
): Observable<BaseResponse<Any>>

结果服务端又返回 {"code":400,"msg":"EOF"},问服务端小弟说是Body形式,但第一种就是Body封装请求了,难道还有其他方式,查询了一下才发现还需要额外配置body.

 @HTTP(method = "DELETE", path = "api/user/xxx", hasBody = true)
    fun deleteBank(
        @Body params: RequestBody
    ): Observable<BaseResponse<Any>>

如上面方式  hasBody 设置为true后再请求就正常了

上面是一种Delete的形式,还有可能只有value而不是key-value形式,如 api/user/xxx/{id},则通过@Path进行配置

    @HTTP(method = "DELETE", path = "api/user/xxx/{id}", hasBody = true)
    Observable<BaseResponse> schoolDeletePic(@Path("id") String id);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
如果要在 Android 中使用 Retrofit 请求设置 Range 实现下载测速功能,可以参考以下代码: ```java // 创建 Retrofit 实例 Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://example.com/") .build(); // 定义 API 接口 interface ApiService { @Streaming @GET Call<ResponseBody> downloadFile(@Header("Range") String range, @Url String url); } // 创建 API 实例 ApiService apiService = retrofit.create(ApiService.class); // 下载文件并测速 long start = System.nanoTime(); Call<ResponseBody> call = apiService.downloadFile("bytes=0-1023", "http://example.com/file.zip"); Response<ResponseBody> response = call.execute(); long end = System.nanoTime(); // 计算下载速度 float speed = response.body().contentLength() / ((end - start) / 1e9f); Log.d("DownloadSpeed", "下载速度:" + speed + " B/s"); ``` 上面的代码中,我们使用 Retrofit 创建了一个 API 接口 `ApiService`,其中定义了一个下载文件的方法 `downloadFile()`,它接受两个参数: - `range`:请求头中的 Range 字段,用于指定下载的文件范围; - `url`:要下载的文件的 URL。 在调用 `downloadFile()` 方法时,我们传入了一个范围为 0-1023 的参数,表示只下载文件的前 1KB。下载完成后,我们计算了下载速度(单位为 B/s),并使用 Log 输出了结果。 注意,为了支持大文件下载,我们在 `@GET` 注解中使用了 `@Streaming` 注解,以避免一次性将整个响应体读入内存。同时,为了支持断点续传,我们在请求头中添加了 `Range` 字段。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值