0

アプリの最初の実行では、データベースファイルをデータフォルダーにコピーする必要があります。約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<Void, Void, Void> {


    @Override
    protected Void doInBackground(Void... params) {
        return null;
    }

     protected void onPreExecute(Void parmas2) {
         Context cntx = getApplicationContext();
         Toast toast = Toast.makeText(cntx, "aaaaaaaaaaa",Toast.LENGTH_SHORT);
         toast.show();
     }

     protected void onPostExecute(Void parmas3) {

     }

 }

私のせいはどこですか?どうすれば修正できますか?データベースコピーの途中で乾杯したい。

4

1 に答える 1

3

If I understand that createDataBase is the part that takes 10 seconds then,

You should move

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

into the doInBackground method of the AsyncTask.

The AsyncTask works by calling doInBackground in a seperate thread, but the other methods (onPreExecute, etc) on the Ui Thread. If you want a toast to be displayed and not block the Ui thread with your database creation, you need to put the heavy work into doInBackground.

于 2013-01-01T22:24:22.460 に答える