簡體   English   中英

使用Retrofit 2發送帶有url參數的帖子

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM