我对着在上传文件到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