progressDialog wihile创建数据库

时间:2012-12-05 09:14:08

标签: android progressdialog

你能帮我改变一段代码来显示progresDialog或数据库创建过程中的一些信息。我试图用Thread做这个没有成功。当我将大部分代码放入线程时,我得到错误,当在创建数据库之前只设置db.createDataBase()“text”时。

public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  myCalendar = new MyCalendar();
  menu = (TextView) findViewById(R.id.poleMenu);
  text = (TextView) findViewById(R.id.glownePoleTekstowe);
  menu.setText(kalendarz.setCurrentDateOnView());
  value = menu.getText().toString();

  db = new DatabaseHandler(this);

  try {
    // separate class to load database
    // MOST IMPORTANT
    db.createDataBase();

  } catch (IOException ioe) {
    throw new Error("nie można utworzyć bazy danych");
  }


  dane = db.getDataFromDate(value);
  db.close();
  try {
    log = dane.getTekst();
  }catch(Exception e) {System.out.println(e);}
  text.setText(log);
}

使用线程和处理程序进行更新:

public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);


  kalendarz = new Kalendarz();
  menu = (TextView) findViewById(R.id.poleMenu);
  text = (TextView) findViewById(R.id.glownePoleTekstowe);

  menu.setText(kalendarz.setCurrentDateOnView());
  value = menu.getText().toString();

  db = new DatabaseHandler(this);

  // thread
  ladujDane();

  dane = db.getDaneFromDate(value);
  db.close();
  try {
    log = dane.getTekst();
  }catch(Exception e) {System.out.println(e);}
  text.setText(log);
}

// ------------------------------------------

public void ladujDane() {

  mLoadDBHandler = new Handler()
  {
    @Override
    public void handleMessage(Message msg)
    {
      progressDialog.dismiss();
    }
  };


  progressDialog = ProgressDialog.show(
  this,
  "Ładowanie danych", "Proszę chwilkę poczekać", 
  true,
  false);

  Thread t = new Thread(new LoadDBThread());
  t.start();

}

// ----------------------------------------

private class LoadDBThread implements Runnable
{
  public void run()
  {

    try {

    db.createDataBase();

    } catch (IOException ioe) {
    throw new Error("nie można utworzyć bazy danych");
    }

    mLoadDBHandler.sendEmptyMessage(0);
  }
}

2 个答案:

答案 0 :(得分:1)

只需使用AsyncTask,您就可以从它的onProgress安全地进行mage进度条。 您无法从UI线程以外的线程更改UI元素,另一方面您无法在UI线程中执行持久的操作。 AsyncTask是你的答案。

答案 1 :(得分:1)

您的问题是您正在尝试在主线程之外的其他线程上执行UI操作。

您可以使用处理程序。首先声明一个处理程序:

    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            // do UI stuff
        }
    };

然后从创建数据库的线程中调用:handler.sendEmptyMessage(0);