2016-03-31 59 views
0

我對此很陌生,所以如果我的一些術語不穩定,請和我一起裸照。我正在編寫一個需要與服務器通信的Android應用程序。我正在努力爲OkHttp3使用MultipartBody。我的代碼如下所示:使用OkHttp3發送MultipartBody

OkHttpClient client = new OkHttpClient(); 

try 
{ 
    RequestBody requestBody = new MultipartBody.Builder() 
        .setType(MultipartBody.FORM) 
        .addFormDataPart("someKey1", "someString1") 
        .addFormDataPart("someKey2", "someString2") 
        .build(); 
    System.out.println(requestBody.toString()); 

    Request request = new Request.Builder() 
        .url("server url") 
        .post(requestBody) 
        .build(); 

    Response response = client.newCall(request).execute(); 
    return response; 
} 
catch (IOException e) 
{ 
    e.printStackTrace(); 
    return false; 
} 

這幾乎是每個人使用的標準代碼。服務器收到請求,但我無法從請求中獲取MultipartBody。當打印多部分機身時,它看起來像這樣:

I/System.out: [email protected] 

所以我的問題是:爲什麼它不包含我的數據,應該嗎?我是否缺少一個庫(我在Gradle中包含了編譯'com.squareup.okhttp3:okhttp:3.2.0'並且假設MultipartBody是這個庫的一部分)?什麼是MultipartBody應該看起來像?

我試着發送一個FormBody,但它看起來一樣。有人可以幫幫我嗎?

+0

見你的答案在這裏:http://stackoverflow.com/questions/24279563/uploading-a-large-file-in-multipart-using-okhttp –

+0

謝謝,我做看看這些例子。然而,我更關心MultipartBody在轉換爲字符串時的外觀,以確保發送正確的數據。 – hgb

+0

等一下,你不是隻使用multipart,因爲你需要發送文件嗎? –

回答

0

刪除okhttp3.Response response = client.newCall(request).execute();

okhttp3.Call call = client.newCall(request); 
    call.enqueue(new okhttp3.Callback() { 
     @Override 
     public void onFailure(okhttp3.Call call, IOException e) { 
      e.printStackTrace(); 
     } 

     @Override 
     public void onResponse(okhttp3.Call call, okhttp3.Response response) throws IOException { 

     } 

    });