2016-09-09 6 views
0

サーバーにメッセージを投稿する必要があります。 - MediaType:application/x-www-form-urlencoded投稿リクエストを作成するにはどうすればよいですか?私はOkHttpを使用しますか?サーバーの応答なし

Bodyを作成するためにFormEncodingBuilderクラスを使用しました。 私はこのコードを書いています。

Uri.Builder uri = new Uri.Builder() 
      .scheme(SCHEME) 
      .encodedAuthority(HOST) 
      .appendPath("v3") 
      .appendPath("svc") 
      .appendPath("auth"); 

    FormEncodingBUilderformBody = new FormEncodingBUilder() 
      .add("name", data.getName()) 
      .add("gender", data.getGender()) 
      .build(); 

    Request request = new Request.Builder() 
      .url(uri.build().toString()) 
      .post(formBody) 
      .build(); 

    try { 
     Response response = mHttpClient.newCall(request).execute(); 
     String body = response.body().string(); 

     return body; 
    } catch (Exception e) { 
     throw new ApiException(0, e.toString()); 
    } 

ただし、サーバーがパラメータを読み取っていません。
したがって、サーバー要求パラメータの値。
メッセージを作成するにはどうすればよいですか?

答えて

0

おそらく、あなたは文字セットを設定する必要があります。
FormEncodingBuilderクラスはMediaType "application/x-www-form-urlencoded"のみを使用します。
したがって、FormEncodingBuilderのような新しいクラスを作成することができます。

public class OkHttpFormBuilder { 

private MediaType CONTENT_TYPE = MediaType.parse("application/x-www-form-urlencoded;charset=utf-8"); 
private final StringBuilder content = new StringBuilder(); 


public OkHttpFormBuilder() { 
} 

public MediaType getCONTENT_TYPE() { 
    return CONTENT_TYPE; 
} 

public void setCONTENT_TYPE(MediaType CONTENT_TYPE) { 
    this.CONTENT_TYPE = CONTENT_TYPE; 
} 

public OkHttpFormBuilder add(String name, String value) { 
    if(this.content.length() > 0) { 
     this.content.append('&'); 
    } 

    try { 
     this.content.append(URLEncoder.encode(name, "UTF-8")).append('=').append(URLEncoder.encode(value, "UTF-8")); 
     return this; 
    } catch (UnsupportedEncodingException var4) { 
     throw new AssertionError(var4); 
    } 
} 

public String getContent() 
{ 
    return this.content.toString(); 
} 

public RequestBody build() { 
    if(this.content.length() == 0) { 
     throw new IllegalStateException("Form encoded body must have at least one part."); 
    } else { 
     byte[] contentBytes = this.content.toString().getBytes(Util.UTF_8); 
     return RequestBody.create(CONTENT_TYPE, contentBytes); 
    } 
}} 

あなたはこのクラスを使用してformbody行った後、サーバー

に送信してみてください
関連する問題