Android 如何在初始化数据库时显示初始屏幕?

Android 如何在初始化数据库时显示初始屏幕?,android,Android,我已经创建了一个闪屏,它工作得非常完美。现在,我想在显示启动屏幕的同时加载数据库,并在数据库完全加载后显示应用程序UI我有以下代码来执行此操作,对吗 public class Splash extends Activity{ @Override protected void onCreate(Bundle bundle) { super.onCreate(bundle); new LoadDatabase().execute(); } @Override protected

我已经创建了一个闪屏,它工作得非常完美。现在,我想在显示启动屏幕的同时加载数据库,并在数据库完全加载后显示应用程序UI
我有以下代码来执行此操作,对吗

public class Splash extends Activity{

@Override
protected void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    new LoadDatabase().execute();
}

@Override
protected void onPause() {
    super.onPause();
    finish();
}

// Load DB
protected class LoadDatabase extends AsyncTask<Context, Integer, String> 
{ 
     @Override 
     protected String doInBackground( Context... params ) { 
         try {
            new DatabaseHelper(getApplicationContext()).initializeDatabase();
        } catch (IOException e) {
            e.printStackTrace();
        }
         return "";
     } 

     @Override 
     protected void onPreExecute() { 
        super.onPreExecute(); 
        setContentView(R.layout.splash);
     } 

     @Override
    protected void onPostExecute(String result) {           
        super.onPostExecute(result);
         Intent openMain = new Intent("com.nepways.MAIN"); 
         startActivity(openMain); 
    }
}
公共类启动扩展活动{
@凌驾
创建时受保护的void(捆绑){
super.onCreate(bundle);
新建LoadDatabase().execute();
}
@凌驾
受保护的void onPause(){
super.onPause();
完成();
}
//负载分贝
受保护类LoadDatabase扩展异步任务
{ 
@凌驾
受保护的字符串doInBackground(上下文…参数){
试一试{
新建DatabaseHelper(getApplicationContext()).initializeDatabase();
}捕获(IOE异常){
e、 printStackTrace();
}
返回“”;
} 
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
setContentView(R.layout.splash);
} 
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
Intent openMain=newintent(“com.nepways.MAIN”);
星触觉(openMain);
}
}
}



有什么好的例子或建议吗??请帮我解决这个问题。

在一个线程中加载数据库,一旦加载完毕,使用handler进入下一个屏幕,使用android的handler类。搜索handler和thread您将得到很多解决方案。

调用一个活动,让我们称之为SplashScreen。从此活动调用一个
AsyncTask
,该活动访问您创建的另一个类,扩展
SQLiteOpenHelper
。此类初始化数据库。

当此异步任务完成工作后,它将控件返回到UI线程,现在关闭SplashScreen。

在您的onCreate SplashScreen中编写以下代码

    myDataBase=this.openOrCreateDatabase(DB_NAME, MODE_PRIVATE, null);
    DatabaseHelper dbHelper = new DatabaseHelper(getApplicationContext());
    dbHelper.openDataBase();

在构造函数之前声明数据库详细信息

您可以通过异步或线程和处理程序执行此操作

protected class MyTask extends AsyncTask<Context, Integer, String> 
{ 
     @Override 
     protected String doInBackground( Context... params ) 
     { 
      // write ur database functionality 
     } 

     // -- gets called just before thread begins 
     @Override 
     protected void onPreExecute() 
     { 
        // u may show ur progressbar or spalsh screen
        super.onPreExecute(); 

     } 


     // -- called as soon as doInBackground method completes 
     @Override 
     protected void onPostExecute() 
     { 
       super.onPostExecute(result); 
      // Intent openMain = new Intent("com.nepways.MAIN"); 
            startActivity(openMain); 
     } 
} 
受保护类MyTask扩展了AsyncTask
{ 
@凌驾
受保护字符串doInBackground(上下文…参数)
{ 
//编写ur数据库功能
} 
//--在线程开始之前被调用
@凌驾
受保护的void onPreExecute()
{ 
//您可以显示您的进度条或spalsh屏幕
super.onPreExecute();
} 
//--在doInBackground方法完成后立即调用
@凌驾
受保护的void onPostExecute()
{ 
super.onPostExecute(结果);
//Intent openMain=newintent(“com.nepways.MAIN”);
星触觉(openMain);
} 
} 

试试这个。。。也许它会对你有所帮助

它的演示就在这里。签出:@Kartik我已经按照你的建议编辑了我的整个splash类,是吗?是的,它会工作,只需从你的oncreate函数new MyTask()调用它即可。执行(this);我找到了UI线程和背景的教程。这将在UI线程上进行初始化,如果需要的时间超过几秒钟,可能会使应用程序无响应。考虑使用AsYcTask代替。