2017-03-07 2 views
0

プレーンテキストとプレーンデータを一緒にアップロードする必要があります。アライリストの整数です。 は、私は画像の部分については、プレーンデータのためRetrofit - Integer arraylistと画像ファイルを組み合わせる

を@PartMap使用していますここに私のコードは、プレーンデータに

HashMap<String, RequestBody> partMap = new HashMap<>(); 
partMap.put("userId", userIdBody); 
partMap.put("customer_type", customerTypeBody); 

要求を組み合わせることで、プレーンデータ

userIdBody = RequestBody.create(MediaType.parse("text/plain"), userId); 
customerTypeBody = RequestBody.create(MediaType.parse("text/plain"), typeOfCustomer); 

については

imageFile = new File(imagePath); 
imageBody = RequestBody.create(MediaType.parse("image/*"), imageFile); 
multipartImageBody = MultipartBody.Part.createFormData("file_name", imageFile.getName(), imageBody); 

ある

@POST<T> methodName(@PartMap Map<String, RequestBody> params, @Part MultipartBody.Part imageParam); 

問題は、私がRequestbodyとして整数listarrayを追加しようとした場合、データはサーバーではなく、私たちは、私が

RequestBody.create(Mediatype,byte[]) 
を試してみました何のアプリ側自体

から正しいデータを送信する必要があります解析に失敗した文字列に変換され、発生しました

Requestbodyは私たちのデータをバイト配列として受け入れるこのメソッドを持っています。私はarraylistをバイト配列に変換しましたが、結果は期待通りでした。

私は試してみるべき他の可能性はありますか?このような

+0

テキストデータを使って画像をアップロードするにはmultipartを使用することができます – Sony

+0

私は実際に複数のテキストデータを持っています –

答えて

0

使用それはインターフェース部

@Multipart 
@POST("your/link") 
Call<SuccessMessage> yourMethod(@Part MultipartBody.Part image, 
                  @Part MultipartBody.Part[] data);//here you can use partmap also 

であり、ここで、それは

MultipartBody.Part img = RequestHelper.multiPartBobyPart(image, "image"); 


    MultipartBody.Part[] parts = new MultipartBody.Part[size]; 
     for (int i = 0; i < size; i++) { 
      parts[i] = RequestHelper.multiPartBobyPart(yourStringArrayList.get(i), "var[]"); 
     } 
    Call<SuccessMessage> call = mNetworkInterface.applyForDomesticJob(img, parts); 
    call.enqueue(this); 

使用される方法であり、ここで要求ヘルパークラス

public final class RequestHelper { 

public static MultipartBody.Part multiPartBobyPart(java.io.File file, String parameterName) { 
    return MultipartBody.Part.createFormData(parameterName, file == null ? "noFile" : file.getName(), 
      RequestBody.create(MediaType.parse("multipart/form-data"), file == null ? new java.io.File("") : file)); 
} 

public static RequestBody getRequestBody(String parameter) { 
    return RequestBody.create(MediaType.parse("multipart/form-data"), parameter); 
} 


public static MultipartBody.Part multiPartBobyPart(String data, String parameterName) { 
    return MultipartBody.Part.createFormData(parameterName, data); 
} 

}

にあります

us e this link詳細情報

+0

これは単純な文字列データでは動作しますが、int arraylistでは動作しません。 –

+0

intの配列を送信しますか? – Sony

+0

はい、私は質問でそれを言及しました。 –

0

int[]からbyte[]への変換は、エンディアンの問題のようです。サーバーがデータを受け入れるエンディアンをチェックし、変換コードが同じエンディアンを使用しているかどうかを確認する必要があります。 ByteBufferを使用して変換を行うことができます。これには、エンディアンを指定するorder()メソッドがあります。

私はretrofitの RequestBody.createに問題がありませんでしたので、これが問題であると思われます。

関連する問題