0

在我的应用程序的第一次运行中,我必须将数据库文件复制到数据文件夹。大约需要 10 秒,在这段时间内,用户会看到黑屏。我想使用 AsynTask 技术向用户展示 Toast。

使用此代码,我调用复制数据库类,也调用 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

如果我理解那createDataBase是需要 10 秒的部分,

你应该搬家

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

进入doInBackgroundAsyncTask 的方法。

AsyncTask 通过调用doInBackground单独的线程来工作,但onPreExecute在 Ui 线程上调用其他方法(等)。如果你想显示一个 toast 而不是在创建数据库时阻塞 Ui 线程,你需要把繁重的工作放到doInBackground.

于 2013-01-01T22:24:22.460 回答