0

AWS TransferManager を使用してファイルを SD カードにダウンロードしています。ProgressListener を使用できますが、別のスレッドにあるため、ビューを更新できません。これどうやってするの?

以下の 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!!!");
              }
          }
      });

   }

}
4

2 に答える 2