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