0

ProgressDialog をセットアップして、バイトの InputStream の進行状況をユーザーに表示しようとしています。以下の方法で、Android Studio のコンソールにこれを表示できます。

Log.d(TAG, "Progress, transferred " + Integer.toString(100 *  bytesTransferred/osSize) + "%");

ただし、bytesTransferred/osSize を ProgressDialog に正しくアタッチする方法がわかりません。スレッドを使用して、以下のコードでプログレス バーがプログレス バーを埋めるのにかかる時間を計ることができます。

    update = new ProgressDialog(this);
    update.setTitle("Transferring update");
    update.setMessage("Please wait updating...");
    update.setCanceledOnTouchOutside(false);
    update.setProgress(0);

    final int totalProgressTime = 100;
    final Thread t = new Thread() {
        @Override
        public void run() {
            int jumpTime = 0;
            while(jumpTime < totalProgressTime) {
                try {
                    sleep(1800);
                    jumpTime += 1;
                    update.setProgress(jumpTime);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    };
    t.start();

    update.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    update.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
        }
    });
    update.show();
} 

しかし、バイトの実際の転送をユーザーに示す方がはるかに優れています。これは私が取り組まなければならないものです:

    final int osSize;
    final InputStream inputStream;

    osSize = inputStream();

    public void onProgress(int bytesTransferred) {
    Log.d(TAG, "Progress, transferred " + Integer.toString(100 * bytesTransferred/osSize) + "%");

    }

事前に感謝します。

4

1 に答える 1

0

これを拡張します:

    @Override
    public void run() {
        int jumpTime = 0;
        while(jumpTime < totalProgressTime) {
            try {
                sleep(1800);
                jumpTime += 1;
                update.setProgress(jumpTime);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

これとともに:

    @Override
    public void run() {
        int jumpTime = 0;
        while(jumpTime < totalProgressTime) {
            try {
                sleep(1800);
                jumpTime += 1;
                final int fJumpTime = jumpTime;
                runOnUiThread(new Runnable() {
                  @Override
                  public void run() {
                    update.setProgress(fJumpTime);
                });
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
于 2017-05-30T09:09:25.063 に答える