我正在使用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!!!");
}
}
});
}
}