2012-01-19 12 views
0

これは私の最初のAndroidアプリであると説明することから始めましょう。だから私はまだすべてのコンセプトを完全に把握していません。私は、この問題が知識の不足に関連するものと期待していますが、今回はこの問題の解決策をgoogleにすることはできません。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(); 

私が間違ってやっているのか、それともそれは完全に異なって何をすべきか任意のアイデア?

+3

UIスレッド内のオブジェクトに対する操作を別のスレッドから呼び出すことはできません。 – waqaslam

答えて

1

ここthreading in Androidに対処するいくつかのアプローチへの素晴らしいスタートのためのドキュメントです。あなたの問題の原因あなたがUI以外のスレッドからあなたのUIを更新しようとしているということです。このドキュメントで説明されているように、AsyncTaskで背景作業を処理し、onProgressUpdateメソッドで進行状況の更新を行うことで、これを最も簡単に修正できます。

+0

Tha nks、AsyncTaskを使用するように書き直します。私が必要とするものは、実際は完全に既にビルドされています。 – winkbrace

関連する問題