AsyncTask с параметрами textview - PullRequest
1 голос
/ 27 марта 2012

У меня есть AsyncTask с текстовым представлением, загруженным в класс, поэтому он выглядит примерно так:

private class MyClass extends AsyncTask<TextView, Void, Void>{
}
TextView tv;

Загружен таким образом

"new MyClass(tv).execute();"

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

Моя ошибка обнаружена в "protected Void doInBackground (TextView ... params) {" здесь params - это TextView [], но не один TextView.

У кого-нибудь есть решение этой проблемы?

Ответы [ 3 ]

4 голосов
/ 27 марта 2012

Ваш TextView является первым элементом в params:

TextView tv = params[0];

ПРИМЕЧАНИЕ:

Если вы планируете изменить это TextView in doInbackground() не делайте это, потому что вы выбросите исключение (вы не можете изменить представление из другого потока, вместо этого используйте метод onPostExecute).

3 голосов
/ 27 марта 2012

Вы не можете изменить сигнатуру метода AsyncTask.doInBackground ().

Он определен для принятия параметра varargs, поэтому вам придется передать параметр TextView [] в AsyncTask.

Try Arrays.asList(tv);

Если вы хотите передать один TextView, вам нужно определить Construcotr в MyClass, а затем сохранить TextView как поле в MyClass. Остерегайтесь делая это, однако, вы не должны хранить ссылки на View или Context в ваших задачах. Это предотвратит сборку мусора ОС Android, которая владеет TextView и может привести к утечке памяти. Если вам нужно сохранить ссылку на представление или контекст в AsyncTask, используйте что-то вроде этого:

private class MyClass extends AsyncTask<TextView, Void, Void>{ 

    private WeakReference<TextView> tvRef;

    public MyClass(TextView tv) {
        this.tvRef = new WeakReference<TextView>(tv);
    }
}
2 голосов
/ 27 марта 2012

Просто прочитайте params[0] в качестве параметра. Вы можете передавать одно значение, последовательность или массив везде, где вы видите ... в списке параметров. (Одно значение - это последовательность, содержащая только один элемент.)

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