gpt4 book ai didi

android - 改造为异步 FormUrlEncoded DELETE 调用抛出 IllegalArgumentException 异常

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:30:01 28 4
gpt4 key购买 nike

我正在尝试制作一个异步 POST 和 DELETE,它是在 Android 4.4 中使用 Retrofit 编码的形式 url

这是我的客户 -

@FormUrlEncoded
@POST(INetwork.API_BASE_PREFIX + "/memberships.json")
void join(@Field("id") String id, Callback<?> cb);

@FormUrlEncoded
@DELETE(INetwork.API_BASE_PREFIX + "/memberships.json")
void leave(@Field("id") String id, Callback<?> cb);

这是个异常(exception)——

java.lang.IllegalArgumentException: IRepositoryClient.leave: FormUrlEncoded can only be specified on HTTP methods with request body (e.g., @POST).
at retrofit.RestMethodInfo.methodError(RestMethodInfo.java:118)
at retrofit.RestMethodInfo.parseMethodAnnotations(RestMethodInfo.java:191)
at retrofit.RestMethodInfo.init(RestMethodInfo.java:128)
at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:329)
at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:264)
at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:315)
at retrofit.CallbackRunnable.run(CallbackRunnable.java:42)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at retrofit.Platform$Android$2$1.run(Platform.java:142)
at java.lang.Thread.run(Thread.java:841)

我查看了源代码,基本上如果方法没有主体并且请求是 formurlencoded,就会抛出这个异常。我还注意到 FormUrlEncoded 的所有示例在非异步时都可以正常工作,即我有某种返回类型但没有回调 - 抱歉我有点迷路

我应该发送空体吗?我需要发送一个吗?@Field 参数是否足够?

使用 Retrofit 1.5.0

最佳答案

HTTP 的 RFC 不清楚是否允许 DELETE 方法具有请求主体。由于没有错误,翻新会在谨慎的一面引发错误。

但是,您仍然可以通过使用自定义 HTTP 方法注释来包含一个(假设 HTTP 客户端支持它)。

package com.myapp;

@Target(METHOD)
@Retention(RUNTIME)
@RestMethod(value = "DELETE", hasBody = true)
public @interface BODY_DELETE {
String value();
}

现在使用您定义的自定义注释指定您的接口(interface)方法。

@FormUrlEncoded
@BODY_DELETE(INetwork.API_BASE_PREFIX + "/memberships.json")
void leave(@Field("id") String id, Callback<?> cb);

关于android - 改造为异步 FormUrlEncoded DELETE 调用抛出 IllegalArgumentException 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22572301/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com