Ich habe Probleme beim Hochladen von Dateien in Amazon S3. Um den Status der hochgeladenen Datei zu verfolgen, verwende ich TransferListener zusätzlich zu transferUtility. Genaues Problem ist, dass die Methode onProgressChanged manchmal überhaupt nicht aufgerufen wird. Und manchmal funktioniert es gut. Ich habe festgestellt, dass das Problem auftritt, wenn ich versuche, größere Dateien hochzuladen. Also hier ist, wie ich es versucht habe.Transferutility in Aws sdk
Code:
@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);
}
}
und 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());
}
}
Wie dieses Problem zu lösen?
Was sind die besten Praktiken, um diese Art von Problemen zu vermeiden?
UPDATE:
Hier 84 ist meine Datei-ID. 0 ist die Anzahl der Bytes transferrred.I dies in logcat in onProgressChanged Verfahren gedruckt
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
Ich benutze 2.2.15. – sandesh
behebt ein Upgrade auf 2.2.16 mein Problem? – sandesh
In der Theorie ja. Andernfalls öffne bitte eine neue Ausgabe auf Github. – Yangfan