amazon s3にファイルをアップロードする際に問題が発生しています。私はtransferUtilityに加えてTransferListenerを使っています。正確な問題は、onProgressChangedメソッドがまったく呼び出されないことです。時にはうまくいっています。大きなファイルをアップロードしようとしているときに問題が発生していることがわかりました。だからここで私が試した方法です。Aws sdkの移行能力
コード:
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
Log.d("ID VALUE",String.valueOf(this.ID));
if(sS3Client!=null&&this.ID==-1){
Log.d("ID","InItial setup");
sTransferUtility = new TransferUtility(sS3Client, this.ctx);
observer = sTransferUtility.upload(remotepath, file.getName(), file);
observer.setTransferListener(new UploadListener(this.progressBar,observer,file.getPath()));
observerlist.add(observer);
}
}
とUploadListener:
private class UploadListener implements TransferListener{
private ProgressBar progress;
private TransferObserver localobserver;
private int value;
private String file;
private DBoperations DB;
private ContentValues CV;
private ContentValues CV2;
private UploadListener(ProgressBar progressBar,TransferObserver observer,String file){
this.progress=progressBar;
this.localobserver=observer;
this.file=file;
DB = new DBoperations(getContext());
}
@Override
public void onStateChanged(int i, TransferState transferState) {
switch (transferState.toString()) {
case "IN_PROGRESS":
{
CV = new ContentValues();
CV2= new ContentValues();
Log.d("FILE UPLOAD","IN_PROGRESS");
CV.put(DBconstants.TableConstants.F_FILE_STATUS, constants.UPLOADING);
DB.updateInformation(DB, DBconstants.TableConstants.TABLE_FILES, CV, DBconstants.TableConstants.F_LOCAL_PATH, this.file);
CV2.put(DBconstants.TableConstants.UPLOAD_ID, i);
DB.updateInformation(DB, DBconstants.TableConstants.TABLE_FILES, CV2, DBconstants.TableConstants.F_LOCAL_PATH, this.file);
}
break;
case "COMPLETED":
{
CV= new ContentValues();
Log.d("FILE UPLOAD","COMPLETED");
CV.put(DBconstants.TableConstants.F_FILE_STATUS, constants.UPLOADED);
DB.updateInformation(DB, DBconstants.TableConstants.TABLE_FILES,CV, DBconstants.TableConstants.F_LOCAL_PATH,this.file);
}
break;
}
}
@Override
public void onProgressChanged(int i, long l, long l1) {
updator();
progress.setIndeterminate(false);
progress.setProgress(value);
Log.d(String.valueOf(i),String.valueOf(value));
}
@Override
public void onError(int i, Exception e) {
}
private void updator()
{
value = (int) ((double) localobserver.getBytesTransferred() * 100/localobserver
.getBytesTotal());
}
}
どのようにこの問題を解決するには?
このタイプの問題を回避するためのベストプラクティスは何ですか?
UPDATE:
ここで84は私のファイルIDです。 0は転送されたバイト数です。これをonProgressChangedメソッドのlogcatに出力しました
05-15 17:24:56.640 22043-6710/? D/UploadTask: multipart upload 84 in 22 parts.
05-15 17:24:56.649 22043-22043/? D/84: 0
私は2.2.15を使用しています。 – sandesh
2.2.16にアップグレードすると問題が解決しますか? – sandesh
理論的にはそうです。それ以外の場合はGithubで新しい問題を開いてください。 – Yangfan