我正在使用AWS TransferManager将文件下载到SD卡。它允许一个ProgressListener,但我不能更新视图,因为它在不同的线程上。我怎样才能做到这一点?如何在ProgressListener中使用AWS TransferManager更新Android UI?
的btn.setText()以下方法产生这样的警告并不会更新UI:
android.view.ViewRootImpl $ CalledFromWrongThreadException:只有创建视图层次的 原来的线程可以触摸它观点。
public class Download
{
ProgressDialog dialog;
File new_video_file;
Button btn; //the progress meter needs to know what button called this. set via setter method below.
int position;
protected void start(int position, Button btn)
{
this.btn = (Button) btn;
this.position = position;
this.new_video_file = new File(storage_dir, arr_videos.get(position)); //local file to be writtent to
AWSCredentials credentials = new BasicAWSCredentials("xxx", "xxx");
TransferManager tx = new TransferManager(credentials);
Log.v("s3_bucket", s3_bucket);
Log.v("s3_dir", s3_dir);
Log.v("name", arr_videos.get(position));
final com.amazonaws.services.s3.transfer.Download download = tx.download(s3_bucket, s3_dir + arr_videos.get(position), new_video_file);
download.addProgressListener(new ProgressListener() {
public void progressChanged(ProgressEvent pe) {
Double progress = download.getProgress().getPercentTransfered();
String percent = progress.intValue() + "%";
Log.v("progress", percent);
btn.setText(percent);
if (download.isDone()) {
Log.v("dev", "download complete!!!");
}
}
});
}
}