2012-05-26 3 views
0

Привет, это мой первый вопрос в stackoverflow, извините, если я что-то не так.Android - Как сделать загрузку при первом запуске

Моя проблема заключается в том, что, когда я запускаю приложение в первый раз, мне нужно написать данные SQL в базе данных. Если я сделаю это в onCreate(), в то время как он пишет sql, он не показывает View, так что это похоже на замораживание. И если я делаю загрузчик там, это не показано, потому что прежде всего ti хочет закончить все oncreate и после этого показать View. Затем я запустил AlertDialog, если SQL пуст, чтобы проинформировать пользователя о необходимости «установки», и после подтверждения мне захотелось сделать окно загрузки при запуске вставки SQL ...

Так что мой вопрос: как сделать загрузка ... OnCreate в управлении деятельностью ... может у меня какой-то хорошая идея ... вот код я сделал:

private DatabaseHandler db = new DatabaseHandler(this); 

Context context; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    context = this;  

    if(db.getWordsCount() == 0) 
    {   
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle("Instalation needed"); 
     builder.setMessage("Database need to be installed"); 
     builder.setPositiveButton("Ok", dialogClickListener); 
     builder.setNegativeButton("Close", dialogClickListener); 
     builder.show(); 
    } 
} 

DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
     switch (which){ 
     case DialogInterface.BUTTON_POSITIVE: 

        ProgressDialog progress = new ProgressDialog(context); 
       progress.setTitle("Instalation"); 
       progress.setMessage("Please wait..."); 
       progress.show();     
       db.insertWords(db); 
       progress.cancel(); 
      break; 

     case DialogInterface.BUTTON_NEGATIVE: 
      finish(); 
      break; 
     } 
    } 
}; 
+1

Возможно создать AsyncTask (отдельный поток), который выполняет часть базы данных. Вы можете сделать экран загрузки в основном потоке пользовательского интерфейса, который останавливается, когда задача будет завершена. – keyser

ответ

0

Существует много всяких примера для же:

http://ashwinrayaprolu.wordpress.com/2011/03/15/android-database-example-database-usage-asynctask-database-export/

private class InsertDataTask extends AsyncTask { 
     private final ProgressDialog dialog = new ProgressDialog(
       DatabaseActivity.this); 

     // can use UI thread here 
     protected void onPreExecute() { 
      this.dialog.setMessage("Inserting data..."); 
      this.dialog.show(); 
     } 

     // automatically done on worker thread (separate from UI thread) 
     protected Void doInBackground(final String... args) { 
      DatabaseActivity.this.application.getDataHelper().insert(args[0]); 
      return null; 
     } 

     // can use UI thread here 
     protected void onPostExecute(final Void unused) { 
      if (this.dialog.isShowing()) { 
       this.dialog.dismiss(); 
      } 
      // reset the output view by retrieving the new data 
      // (note, this is a naive example, in the real world it might make sense 
      // to have a cache of the data and just append to what is already there, or such 
      // in order to cut down on expensive database operations) 
      new SelectDataTask().execute(); 
     } 
    } 
+0

дает мне ошибку в DatabaseActivity.this –

+0

DatabaseActivity вместо этого используйте свое название деятельности –

+0

Хороший ответ. Вы должны понимать эту AsyncTask как объявленную внутри Activity, называемой DatabaseActivity. Затем вы должны отметить правильный ответ. –

Смежные вопросы