Позвольте мне объяснить, что это мое первое приложение для Android. Так что я пока не понимаю всех концепций. Я ожидаю, что эта проблема будет связана с отсутствием знаний, но на этот раз я не могу решить эту проблему.Android - создание диалогового окна прогресса, заполненного нитью
У меня есть этот фрагмент кода для извлечения некоторых данных из удаленной базы данных Mysql для заполнения ListView. Это прекрасно работает.
// fetch family and determine length of the arrays
Familielid[] familie = Mysql.getFamilie();
int len = familie.length;
namen = new String[len]; // groups
lijsten = new String[len][]; // children
// loop through the family and fill names and lists
for (int i=0; i<len; i++)
{
namen[i] = familie[i].getNaam();
Lijst lijst = new Lijst(Mysql.getLijst(familie[i].getId()));
lijsten[i] = lijst.getOmschrijvingen();
}
Теперь, потому что это может занять некоторое время, я хочу показать прогресс бар, который заполняется для каждого (= члена семьи) «Familielid», который был загружен. (Я хочу сделать это таким образом, чтобы узнать, как это сделать) Этот код, однако, вызывает ошибку приложения. :(
// show progress bar while loading
ProgressDialog progressDialog = new ProgressDialog(VerlanglijstenActivity.this);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMessage("Lijstjes ophalen...");
progressDialog.setCancelable(false);
progressDialog.show();
// load lijstjes with progress bar
Thread loadLijstjes = new Thread(new Runnable() {
public void run() {
// fetch family and determine length of the arrays
Familielid[] familie = Mysql.getFamilie();
int len = familie.length;
namen = new String[len]; // groups
lijsten = new String[len][]; // children
// loop through the family and fill names and lists
for (int i=0; i<len; i++)
{
namen[i] = familie[i].getNaam();
Lijst lijst = new Lijst(Mysql.getLijst(familie[i].getId()));
lijsten[i] = lijst.getOmschrijvingen();
// show progress
progressDialog.incrementProgressBy((int) Math.floor(100/len));
}
progressDialog.setProgress(100); // just make sure it's 100% when we're done
progressDialog.dismiss() ; // close the progress bar
}
});
loadLijstjes.start();
Любая идея, что я делаю неправильно? Или это должно быть сделано совершенно по-разному?
вы не может вызывать операции над объектами в потоке пользовательского интерфейса из другого потока. – waqaslam