2015-02-26 2 views
-3

Я новичок в программировании на Android. Это мое первое приложение. Я пытаюсь понять наилучшую практику или способ использования задачи Async.findViewById - Не удается разрешить метод

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

основной класс - рисует некоторые основные вещи на экране и вызывает класс Async. Класс Async - получить данные из strings.xml, отправить его по http, получить контент и сохранить обработанный контент как Enum. N

Мой вопрос - теперь, когда я пытаюсь получить таблицу из activity.xml в методе класса Async, он говорит Не удается разрешить метод findViewById.

Это правильный способ? PLS помощи.

+0

Опубликовать весь код ... –

+0

Что расширяет ваш класс? Просмотр и классы, которые его расширяют, имеют метод, о котором идет речь –

+0

Спасибо, пожалуйста, попробуйте расширить вид ... – lpk

ответ

-2

Вы не можете запускать операции пользовательского интерфейса в фоновом режиме. Вы должны запустить их в onPreExecute, onPostExecute или onProgressUpdate, вот так.

@Override 
    protected void onProgressUpdate (String... result) 
    { 
     ((TextView) findViewById(R.id.textViewRSSI2)).setText(result[0]); 
    } 

Update: в вашем AsyncTask установить три типа:

private class DownloadWebpageTask extends AsyncTask<String, String, String> { 

Первый является то, что вы передаете AsyncTask при выполнении его, второй является прогресс единиц и третий результат единицы.

Когда вы публикуете прогресс, вы делаете что-то подобное в вашем doInBackground():

publishProgress(yourstring); 

результат [0] в коде выше будет yourstring.

и onPostExecute, вы должны return значения в вашем doInBackground:

@Override 
    protected String doInBackground(String... urls) { 
    return yourstring } 
+0

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

+0

Как получить результирующее перечисление в onPostExecute или onProgressUpdate для заполнения таблицы? Какие-либо предложения? – lpk

0

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

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

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

Для этого вы должны поместить любые изменения в метод postExecute вашего класса Async, помните, что все, что было сделано в методе doInBackground, выполняется в другом потоке. Только после этого вы можете применить желаемые изменения.

+0

Проблема в том, что у меня есть Enum в качестве обработанного результата. это не может быть возвращено в Activity из класса, расширяющего класс Async. – lpk

+0

Можете ли вы разместить код?Вы объявляете свой класс Async внутри класса Activity? Вы пытаетесь внести изменения в свой метод doInBackground? –

Смежные вопросы