私はレトロフィット2. URLにPOSTを送信すると、URLパラメータでポストを送るいくつかのパラメータがあります。はレトロフィット2
@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);
urlがこの
www.websiteのように見えます。 com/server/directory/location.type?arg1 = value1 & arg2 = value2
POSTリクエストを使用するように要求されました。値(value1とvalue2)は実行時に動的です。私はXamarinでHttpClientを使ってプロジェクトを開始しましたが、今はJavaのネイティブで書き直しています。 C#で私がしなければならなかったのは、文字列を連結して結果の文字列を単一のPostに送ることでした。
Iは@Pathを使用しようとし、エラーがあった:
"サーバ/ディレクトリ/ location.type" が "{ARG1を}" が含まれていません。 (パラメータ#1)
そして、Iは@queryを使用しようとし、エラーがあった:
java.lang.IllegalArgumentExceptionが:フォームエンコード方法は、少なくとも一つの@Fieldを含まなければなりません。
最後に、私は私を助けるか、私は他の選択肢を持っていないする必要がある場合を教えてください。要求は任意の応答(私は5秒に接続タイムアウトをセッテ)
を取得することはありません@FieldてみましたGET要求を使用します。ここで
((EDIT)) クライアントのセットアップのための私のコードです:
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";
}
私はテストを= 0にするとそれは決してそこには到達しない。私はandroid.os.NetworkOnMainThreadExceptionを避けるために、doInbackgroundでメソッド "callFunctionDB"を呼び出しました。
は、Webサービスを呼び出すコードを共有します –
'@ FormUrlEncoded'なぜですか? – njzk2
あなたは正しいことが問題の1つでした –