【问题标题】:Show toast while database is being copying在复制数据库时显示 toast
【发布时间】:2013-01-01 22:22:39
【问题描述】:

在我的应用程序的第一次运行中,我必须将数据库文件复制到数据文件夹。大约需要 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) {

     }

 }

我的错在哪里?我该如何解决?我想在数据库复制过程中举杯。

【问题讨论】:

  • 您看到了什么错误?有什么问题?

标签: android database multithreading sqlite


【解决方案1】:

如果我知道 createDataBase 是需要 10 秒的部分,那么,

你应该搬家

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

进入 AsyncTask 的 doInBackground 方法。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    相关资源
    最近更新 更多