반응형
AsyncTask for ProgressDialog 내에서 Looper.prepare ()를 호출하지 않은 스레드 내부에 핸들러를 만들 수 없습니다.
이 오류가 발생하는 이유를 이해할 수 없습니다. AsyncTask를 사용하여 백그라운드에서 일부 프로세스를 실행하고 있습니다.
나는 가지고있다:
protected void onPreExecute()
{
connectionProgressDialog = new ProgressDialog(SetPreference.this);
connectionProgressDialog.setCancelable(true);
connectionProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
connectionProgressDialog.setMessage("Connecting to site...");
connectionProgressDialog.show();
downloadSpinnerProgressDialog = new ProgressDialog(SetPreference.this);
downloadSpinnerProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
downloadSpinnerProgressDialog.setMessage("Downloading wallpaper...");
}
doInBackground()
조건 에 따라 들어가면 :
[...]
connectionProgressDialog.dismiss();
downloadSpinnerProgressDialog.show();
[...]
시도 할 때마다 downloadSpinnerProgressDialog.show()
오류가 발생합니다.
어떤 아이디어가 있습니까?
이 메서드 show()
는 UI (사용자 인터페이스) 스레드 에서 호출되어야하며 , 디자인 된 doInBackground()
주된 이유 인 다른 스레드에서 실행됩니다 AsyncTask
.
당신은 전화를해야 show()
에 하나 onProgressUpdate()
또는에서 onPostExecute()
.
예를 들면 :
class ExampleTask extends AsyncTask<String, String, String> {
// Your onPreExecute method.
@Override
protected String doInBackground(String... params) {
// Your code.
if (condition_is_true) {
this.publishProgress("Show the dialog");
}
return "Result";
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
connectionProgressDialog.dismiss();
downloadSpinnerProgressDialog.show();
}
}
비슷한 문제가 있었지만이 질문을 읽음으로써 UI 스레드에서 실행할 수 있다고 생각했습니다.
YourActivity.this.runOnUiThread(new Runnable() {
public void run() {
alertDialog.show();
}
});
나를 위해 트릭을 할 것 같습니다.
I had a hard time making this work too, the solution for me was to use both hyui and konstantin answers,
class ExampleTask extends AsyncTask<String, String, String> {
// Your onPreExecute method.
@Override
protected String doInBackground(String... params) {
// Your code.
if (condition_is_true) {
this.publishProgress("Show the dialog");
}
return "Result";
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
YourActivity.this.runOnUiThread(new Runnable() {
public void run() {
alertDialog.show();
}
});
}
}
final Handler handler = new Handler() {
@Override
public void handleMessage(final Message msgs) {
//write your code hear which give error
}
}
new Thread(new Runnable() {
@Override
public void run() {
handler.sendEmptyMessage(1);
//this will call handleMessage function and hendal all error
}
}).start();
반응형
'Program Tip' 카테고리의 다른 글
템플릿에서 맵을 통해 반복 (0) | 2020.10.11 |
---|---|
새로 생성 된 특정 폴더를 Git의 .gitignore에 추가합니다. (0) | 2020.10.11 |
Oracle 11g에서 + 기호를 사용하여 왼쪽 외부 조인 (0) | 2020.10.11 |
지속적 통합 서버 (0) | 2020.10.11 |
ANSI C에 네임 스페이스가없는 이유는 무엇입니까? (0) | 2020.10.11 |