-1

私のアプリの最初の実行では、データベース ファイルをデータ フォルダーにコピーする必要があります。約 10 秒かかり、その間、ユーザーには黒い画面が表示されます。AsynTask 手法を使用してプログレスバーを表示したいと考えています。しかし、黒い画面が消えた後にプログレスバーが表示されて機能しません...

このコードを使用して、コピー データベース クラスを呼び出し、また AsynTsk プロセスを呼び出します...

    new asyn().execute();
    try {
        myDbHelper.createDataBase();

    } catch (IOException ioe) {
        // throw new Error("Unable to create database");
    }

これは私の AsynTask コードです:

    public class asyn extends AsyncTask<String, Integer, String> {
      ProgressDialog dialog;  
      @Override
      protected void onPreExecute()
      {  
        //loading toast
            //final DataBaseHelper myDbHelper = new DataBaseHelper(this);
            String firstload2 = myDbHelper.getfirstload();
            if(firstload2.matches("1")) {
                 dialog=new ProgressDialog(DictionaryActivity.this);
                   dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                   dialog.setMax(100);
                   dialog.show();
                myDbHelper.changefirstload();
            }



      }  
      @Override
      protected String doInBackground(String... params) {
       // TODO Auto-generated method stub 
       // perform desired task in this doInBackground Block.
       for(int i=0;i<20;i++)
       {
        publishProgress(5);
        try {
         Thread.sleep(100);
        } catch (InterruptedException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
        }
       }

       return "";
      }
      @Override
      protected void onProgressUpdate(Integer... values) {
       // TODO Auto-generated method stub
       super.onProgressUpdate(values);
       dialog.incrementProgressBy(5);   
       }

      @Override
       protected void onPostExecute(String result)
      {
        dialog.dismiss();    
       AlertDialog.Builder a=new Builder(DictionaryActivity.this);
       a.setMessage("Successfully Done");
       a.setTitle("Try");
       a.setPositiveButton("OK",null);
       a.show();
          }  
     }

私のせいはどこですか?どうすればそれを修正できますか?

4

1 に答える 1

1

myDbHelper.changefirstload();doInBackground()メソッド内にある必要があります。onPreExecute()UIスレッドで実行されます。

プログレスバーに関しては、ここでは少し難しいです。個人的には、不確定なプログレスバー(ロード中にアイコンが回転するなど)を実行します。ただし、%バーが必要な場合は、メソッドを複数のメソッドに分割してから、それらの間の進行状況を更新する必要があります。

于 2012-12-31T19:26:02.613 に答える