私はAndroid用のアプリケーションを作成しています。私はRetrofit 2を使用し始めました。ID、名前、コード、写真をサーバにアップロードする必要がありますが、改造2で行う方法はわかりません。私は私がアップロードする必要がありますどのように多くの写真を知りません以下のクラス...Retrofit 2で未知数の画像を含むマルチパートフォームデータを投稿するには?
私はこのクラスを持っている:
class Asset {
private int mId;
private int mName;
private int mCode;
private ArrayList<String> mPhotos;
// ... constructor
// ... getters and setters
}
I、これはリポジトリです:
class AssetsRepository {
// ... private fields
// ... constructor
public void store(Asset asset, final AssetUploadCompletedCallback callback) {
// What should be the arguments?
this.mNPApiService.storeAsset(asset.getCode() /*, ...*/)
.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
callback.onAssetUploadCompletedCallback();
}
@Override
public void onFailure(Call<String> call, Throwable t) {
//error handling
}
});
}
}
そしてNPApiserviceインタフェース:
interface NPApiService {
// ... other methods
@Multipart
@Post("/assets/{code}")
Call<String> storeAsset(@Path("code") String code /*, what should go here?*/)
}
また、パーセンテージでプログレスバーを設定する必要があります。リクエストの総アップロード率を教えてくれるリスナーをどうやって追加できますか?
私は 'NPApiService'インターフェースとリポジトリで' MultipartBody.Part [] '配列の作成を実装しましたが、アップロードの進行状況をパーセンテージでどのように追跡できるかはまだ分かりません。私はこの例を見つけました:https://www.cumulations.com/blogs/34/Retrofit-File-Update-Progressしかし、私はbody内に 'name'、' id'と 'code'のような多くのファイルと他のパラメータを持っていますリクエストの合計アップロード率が必要です。私はRequestBodyとMultipartBody.Partをサブクラス化し、自分のリクエストのボディの総レングスを自分で計算し、この例で提案されているようにリスナーをアタッチしますか? – clzola
はい - すべての画像を含むリクエスト本文の合計長を計算できる場合は、先に進むことができます。私は同じことをしましたが、私の要求に従って進歩はありませんでした。 –
私はそれを正確に行いました。私は 'RequestBody'クラスを拡張し、バッファサイズを4096バイトにしました(コードは以前のコメントに投稿したリンクと非常に似ています)。そしてすべてが機能します! – clzola