возвращаясь из AsyncTask - PullRequest
       1

возвращаясь из AsyncTask

0 голосов
/ 09 октября 2011

У меня проблемы с изменением изображения в моем пользовательском интерфейсе в зависимости от возвращаемого значения логической переменной в моем потоке.

мой класс определяется как:

class recorderThread extends AsyncTask<String, Void, Boolean> {

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

@Override
protected void onPostExecute(Boolean result) {

if (result)
    ball = new Ball(getContext(),R.drawable.correctball);     
else
    ball = new Ball(getContext(),R.drawable.wrongball); 
}

Нет ли способа получить логическое значение при вызове потока в пользовательском интерфейсе?

new recorderThread().execute("A");

Спасибо, ребята, надеюсь, это имеет смысл.

Ответы [ 2 ]

1 голос
/ 09 октября 2011

Нет причин, по которым вы не сможете вернуть логическое значение из вашего метода doInBackground AsyncTask. Просто убедитесь, что определение возвращает логическое значение и что вы устанавливаете его соответствующим образом для своих нужд:

private class recorderThread extends AsyncTask<String, Void, Boolean> {
   protected boolean doInBackground(String... strings) {
       boolean result;
       // Do your background process and make sure
       // that you set the boolean correctly
       return result;
   }

   protected void onPostExecute(boolean result) {
       // Your current UI stuff here.
   }
}

Кроме того, добавьте много логов. Убедитесь, что логическое значение установлено правильно. Кроме того, выполните это с помощью отладчика. Должно быть легко исправить, если вы правильно обновляете интерфейс в методе Ball (). Примечание: проверьте это тоже, чтобы убедиться, что оно работает правильно.

0 голосов
/ 09 октября 2011

Только поток пользовательского интерфейса может изменять пользовательский интерфейс (и ваша асинхронная задача выполняется в отдельном потоке), поэтому все изменения пользовательского интерфейса будут выполняться с помощью runOnUIThread () вашей активности:

    activeHighscoreEntry.setTurns(activeHighscoreEntry.getTurns() + 1);
    runOnUiThread(new Runnable() {
        public void run() {
            if (!handleRemoval(point1)) {
                placeNext();
            }
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...