gpt4 book ai didi

java - 使用 Retrofit 2 发送带有 url 参数的帖子

转载 作者:太空狗 更新时间:2023-10-29 15:40:32 26 4
gpt4 key购买 nike

我想用 Retrofit 2 发送一个 POST。url 有一些参数:

 @Headers({
"Accept: application/x-www-form-urlencoded;",
"User-Agent: my-app"
})
@FormUrlEncoded
@POST("server/directory/location.type")
`public Call<POJOStringValue> dataWithUr(@Path("arg1") String arg1, @Path("arg2"), String arg2);

网址看起来像这样

www.website.com/server/directory/location.type?arg1=value1&arg2=value2

我被要求使用 POST 请求。值(value1 和 value2)在运行时是动态的。我使用 HttpClient 通过 Xamarin 开始了这个项目,现在我正在用 Java native 重写它。在 C# 中,我所要做的就是连接字符串并在单个 Post 中发送生成的字符串。

我尝试使用@Path,但错误是:

"server/directory/location.type" does not contain "{arg1}". (parameter #1)

然后,我尝试使用@Query,错误是:

java.lang.IllegalArgumentException: Form-encoded method must contain at least one @Field.

最后我尝试使用@Field 请求从未得到任何响应(我将连接超时设置为 5 秒)

请帮助我,或者告诉我是否除了使用 GET 请求别无选择。

((编辑))这是我的客户端设置代码:

private static void setupClient(){
final OkHttpClient client = new okhttp3.OkHttpClient.Builder()
.connectTimeout(CONNECTION_TIMEOUT, TimeUnit.SECONDS)
.readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
.writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)
.retryOnConnectionFailure(false)
.build();


//define retrofit
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(iXUtils.getUrl_())
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();

this.client_ = retrofit.create(RequestInterface.class);
}

get() 方法:

public static RequestInterface get(){
return this.client_;
}

我是这样调用它的:

 public String callFunctionDB(String arg1,  String arg2){
setupClient();

Call<POJOStringValue> call = get().dataWithUrlString(arg1, arg2);
try {
POJOStringValue response = call.execute().body();
String value = response.getValue();
int test = 0;
} catch (IOException e) {
String value = "it failded";
e.printStackTrace();
}
return "test";
}

我将 test=0 设置为能够设置一个断点,但它永远不会到达那里。另外,我在 doInbackground 中调用方法“callFunctionDB”以避免 android.os.NetworkOnMainThreadException。

最佳答案

如果你请求表单编码,Retrofit 要求你至少有一个表单参数。您已经回答了自己的问题——您使用的是查询参数而不是 POST 字段,因此不需要注释。删除 @FormUrlEncoded 注释,并将您的参数更改为 @Query 注释。

关于java - 使用 Retrofit 2 发送带有 url 参数的帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41109980/

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