0

Asynctaskにいくつかのスリープ時間を追加しようとしていますが、ロードするデータがあまりないとProgressDialogが速すぎるためです。AsynctaskでThread.sleepを使用中にエラーが発生しました

私はこの試みた:私はエラーを取得しています

@Override 
protected Boolean doInBackground(Void... params) { 
    try { 
     progressDialog.setMessage("Loading first thing..."); 
     firstThing(); 
     progressDialog.incrementProgressBy(1); 
     Thread.sleep(500); 
     //...repeat above four lines a few times for second, third, fourth thing, etc 
     return true; 
    } 
    catch (Exception e) { 
     Log.e("MyClassName", "There was an error: " + e); 
     return false; 
    } 
} 

を「ビューは、そのビューに触れることができます作成​​しただけ元のスレッドを。」

+0

Androidのメインスレッド以外でUIビューを更新しています。 DoInBackgroundは他のスレッドで実行されるため、ビューを更新することはできません。したがって、ビューを更新する場合は、onPreExectute、onPostExectureまたはonProgressUpdateを使用する必要があります。 https://developer.android.com/reference/android/os/AsyncTask.htmlを確認してください。 – AndroidRuntimeException

+0

私はそれらもオーバーライドされています。はい、ここに投稿していません。 – KaliMa

答えて

2

onProgressUpdate()doInBackground()を上書きする必要があります。

  // do this before asynctask.execute(); 
      progressDialog.setMessage("Loading first thing..."); 


@Override 
protected Boolean doInBackground(Void... params) { 
    try { 
     firstThing(); 
     Thread.sleep(500); 
     // this method invokes onProgressUpdate on the UI thread 
     publishProgress(); 
     return true; 
    } 
    catch (Exception e) { 
     Log.e("MyClassName", "There was an error: " + e); 
     return false; 
    } 
} 

@Override 
protected void onProgressUpdate(Void... params) { 
    progressDialog.incrementProgressBy(1); 
} 
+0

ダウンロードしたサイズをパーセンテージで表示することも考えられます。 publishProgress(パーセンテージ);およびpDialog.incrementProgressBy(params [0]); – uguboz

+0

publishProgress()はどのように見えますか? – KaliMa

+0

明らかに、それは組み込み関数です。とにかくその編集をした後、私はまだ同じエラーを取得します。あるいは、私はバックグラウンドスレッドでメッセージを設定しているからかもしれません。私はローディングプロセスのどこにいるかによってメッセージをどのように変更するのですか? – KaliMa

関連する問題