Как я могу прервать асинктическую задачу в моей основной деятельности из класса для отображения alertDialog? - PullRequest
0 голосов
/ 27 ноября 2011

Вот фрагмент кода из моего класса, как я вызываю alertDialog. В моем случае, если число равно нулю, асинхронная задача должна завершиться и отобразить диалоговое окно:

if(count == 0){

            NumberPlateActivity np  = new NumberPlateActivity();

            np.dialog(con);
}

А вот в моей основной деятельности метод, который предполагает прерывание асинхронной задачи и вывод диалога:

public void dialog(final Context context){

    new Thread() { public void run() {    
NumberPlateActivity.this.runOnUiThread(new Runnable() {

    @Override
    public void run() {
        try{
            ImageProc stop = new ImageProc();// ImageProc - asynctask
            stop.cancel(true);

        } catch (Exception e) {

            AlertDialog.Builder builder = new AlertDialog.Builder(context);
            AlertDialog alert = builder.create();
            alert.show();
            builder.setMessage("Plate not found. Try again!")
                   .setCancelable(false)
                       .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int id) {
                           Intent intent = new Intent();
                            intent.setClass(context.getApplicationContext(), ANPR.class);
                            context.startActivity(intent);

                       }
                   });

        } 
    }});
    }
}.start();
}

После выполнения кода я получаю эту ошибку: Невозможно создать обработчик внутри потока, который не вызвал Looper.prepare(). Есть предложения?

Ответы [ 2 ]

0 голосов
/ 31 мая 2012

Если вы завершаете свою AsyncTask, почему бы просто не сделать:

void onPostExecute(...)
{
    if (count == 0)
    {
        NumberPlateActivity np = new NumberPlateActivity();
        np.dialog(con);
    }
}

Кажется, самое простое решение для меня!Это также означает, что вы можете избавиться от Thread и Runnable в public void dialog(final Context context).

Что касается вашего public void dialog(final Context context) метода, я не вижу никакой причины для наличия класса Thread и:

ImageProc stop = new ImageProc();// ImageProc - asynctask
stop.cancel(true);

Я не вижу какой-либо очевидной причины для создания AsyncTask, а затем немедленно его удалить.

0 голосов
/ 31 мая 2012

Вы создаете обработчик внутри основного потока, который выполняет действие.Вы должны сделать это в отдельной теме.

Я не вижу никакого обработчика в вашем коде, поэтому вы, вероятно, используете его где-то, чего мы не видим здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...