11

1つのフォルダから完全に機能する外部SDカードにすべてをコピーするバックアップルーチンがあります。実行中に表示される素敵なポップアップダイアログボックスを取得しようとしていますが、表示されません。実行も試みません(ただし、バックアップは完了します)。

現時点での私のコードは次のとおりです。

public void doBackup(View view) throws IOException{
    ProgressDialog pd = new ProgressDialog(this);
    pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    pd.setMessage("Running backup. Do not unplug drive");
    pd.setIndeterminate(true);
    pd.setCancelable(false);
    pd.show();
    File source = new File("/mnt/extSdCard/DirectEnquiries"); 
    File dest = new File("/mnt/UsbDriveA/Backup");
    copyDirectory(source, dest);
    pd.dismiss();
}
4

3 に答える 3

41

Threadで、またはを使用して、長時間実行されるタスクを実行しAsyncTaskます。その後、あなたProgressDialogが表示されます。

次のようなことをします:

public void doBackup(View view) throws IOException{
    final ProgressDialog pd = new ProgressDialog(this);
    pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    pd.setMessage("Running backup. Do not unplug drive");
    pd.setIndeterminate(true);
    pd.setCancelable(false);
    pd.show();
    Thread mThread = new Thread() {
        @Override
        public void run() {
            File source = new File("/mnt/extSdCard/DirectEnquiries"); 
            File dest = new File("/mnt/UsbDriveA/Backup");
            copyDirectory(source, dest);
            pd.dismiss();
        }
    };
    mThread.start();
}
于 2012-10-15T14:14:36.103 に答える
2

asyntaskを作成し、時間のかかるタスクを配置します

 public void doBackup(View view) throws IOException{
        ProgressDialog pd = new ProgressDialog(this);
       pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        pd.setMessage("Running backup. Do not unplug drive");
       pd.setIndeterminate(true);
       pd.setCancelable(false);
        pd.show();
//create asyntask here
//Put below code in doInBackground mathod
        File source = new File("/mnt/extSdCard/DirectEnquiries"); 
        File dest = new File("/mnt/UsbDriveA/Backup");
        copyDirectory(source, dest);
//put this code in onPostExecute Method.
        pd.dismiss();
    }

Asyntaskのサンプル数を取得します。

于 2012-10-15T14:09:36.663 に答える
1

一度に1つの関数でこれを行う代わりに。次の手順を実行すると、間違いなく機能します。1. 1つの非同期クラスを作成します(コピーディレクトリ機能用に1つの個別のスレッドが作成され、メインUIでは実行されません)。2。非同期クラスを実行する前に進行状況ダイアログを表示します。3.実行後のメソッドで、ダイアログを閉じます。

于 2012-10-15T14:13:10.830 に答える