[英]Send a Post with url parameter with Retrofit 2
我想發送一個帶有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”不包含“{arg1}”。 (參數#1)
然后,我嘗試使用@Query,錯誤是:
java.lang.IllegalArgumentException:表單編碼方法必須至少包含一個@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
注釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.