#android
#Android
Вопрос:
Я создал асинхронную задачу, подобную этой:
private class LongOperationcheckall extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
String result="Start";
try
{
Looper.myLooper().prepare();
// Looper.loop();
// TODO Auto-generated method stub
for(int k=0;k<13;k )
{
checkall();
this.publishProgress("Show the dialog");
//count ;
}
result="Success";
checkallcomp ;
OnscanComplete();
}
catch(Exception ex)
{
checkallcomp ;
OnscanComplete();
}
return resu<
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
Log.i("Progress", "Progressincheck");
}
protected void onPostExecute(String params ) {
Log.w("all Check",params);
// Execution of result of Long time consuming operation
}
}
Я добавил код,
Looper.myLooper().prepare();
для вызова этой задачи как
taskAllcheck = new LongOperationcheckall();
taskAllcheck.execute();
В четвертый раз, когда я нажимаю на кнопку «Пуск» в четвертый раз, это выдает исключение
Не удается создать обработчик внутри потока внутри потока, который не вызывается looper.prepare
Только, когда я запускаю устройство, оно выполняется нормально в эмуляторе, но после добавления этой строки появляется ошибка, поскольку для каждого потока может быть создан только один цикл, когда я нажимаю на кнопку «Пуск» в четвертый раз и вызываю taskAllcheck.execute();
.
Комментарии:
1. Что делает метод checkall()? исключение «Не удается создать обработчик …» обычно возникает, когда вы пытаетесь сделать что-то, что разрешено делать только в потоке пользовательского интерфейса, в фоновом потоке.
2. checkall () проверяет только такие настройки, как включение или выключение Bluetooth, включение или выключение gps на устройстве, и обновляет статус в соответствии с ним в базе данных
3. Вот о чем я говорю. Возможно, это операции, которые должны выполняться в потоке пользовательского интерфейса. Вы можете поместить их в Runnable в метод activity.runOnUiThread(), таким образом вы преодолеете исключение Looper .
Ответ №1:
Пожалуйста, думайте об асинхронном потоке как о потоке пользовательского интерфейса, который имеет встроенный обработчик для обновления вашего пользовательского интерфейса. Несмотря ни на что, это поток. Итак, теперь это очищено, я не вижу, где вы на самом деле написали checkall()
функцию. Функция check all должна быть локальной методологией для вызова асинхронной задачи в фоновом режиме. Это не может быть методом в вашем основном классе. Если это так, то нет смысла иметь асинхронную задачу. Поэтому, пожалуйста, добавьте checkall()
функцию в свою асинхронную задачу.
Далее, в асинхронной задаче нет необходимости в цикле. За обработку данных отвечает:
this.publishProgress(«Показать диалоговое окно»);
Пожалуйста, убедитесь, что вы передаете все, что хотите. int
string
boolean
В этом можно обрабатывать либо , , , , array
либо что угодно и все. Поэтому разумно используйте реализацию.
Теперь сделайте внутреннюю onProgressUpdate()
часть соответствующим образом и, следовательно, также, пожалуйста, проверьте это, если вы хотите, чтобы что-то из потока пользовательского интерфейса выполнялось, например, методы или что-то в этом роде. Это можно сделать с помощью этого метода.
Теперь внесите изменения, о которых я вам сказал. Пожалуйста, перезвоните мне, и я буду в лучшем положении, чтобы работать с вами. Если мы сможем точно определить проблему. Будьте осторожны.