我對着在上傳文件到Amazon S3的問題。要跟蹤上傳文件狀態,除了transferUtility之外,我還使用TransferListener。確切的問題是onProgressChanged方法有時並不會被調用。有時它工作正常。我觀察到,當我嘗試上傳較大的文件時發生問題。所以這裏是我的嘗試。Transferutility在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是傳輸字節數。我將它打印到onCrogressChanged方法中的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