首先让我解释一下这是我的第一款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();
知道我做错了什么吗?或者它应该以完全不同的方式完成?
答案 0 :(得分:1)
以下是处理threading in Android的一些方法的良好开端的文档。您的问题的根源是您尝试从非UI线程更新UI。您可以通过按照文档中的说明在AsyncTask中处理后台工作,并将进度更新放在onProgressUpdate方法中,从而最轻松地解决此问题。