4

Я занимаюсь тяжелыми сетевыми задачами - загрузка изображений (предварительный просмотр) - Для моего основного пользовательского интерфейса, который не должен быть заблокирован, он сделал это в AsyncTask, я хочу поместить их в GridView, но я установил адаптер до завершения работы AsyncTask. Некоторый код будет более полезнымAsyncTask и setAdapter в методах onCreate

public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.gridview); 
      new LoadAllPictures().execute(); 
      GridView g = (GridView) findViewById(R.id.gridview); 
      g.setAdapter(new ImageAdapter(this)); 
} 

Так что в конце концов Logcat показывает, что все было dowloaded, но ничего на моем экране. Я попытался сделать часть setAdapter в моей AsyncTask, но это говорит мне, что: Only the original thread that created a view hierarchy can touch its views.

Что мне делать?

ответ

6

AsyncTask имеет полезный метод, который можно реализовать с именем onPostExecute(). Он вызван из исходного потока пользовательского интерфейса после завершения задачи. Вы можете использовать его для установки адаптера из правильной нити.

4

AsyncTask имеет 3 основных метода:

protected void onPreExecute() 
{ 
} 

protected void onPostExecute(Void unused) 
{ 
    // displaying images 
    // set adapter for listview with downloaded items 
} 

protected Void doInBackground(Void... params) 
{ 
    // downloading and time consuming task 
} 

так что вы можете писать g.setAdapter(new ImageAdapter(this)); внутри метода onPostExecute(Void unused), потому что в это время, снимки уже загружены внутри метода doInBackground().

0

Для удобного асинхронной загрузки картинок и установив их на соображения можно использовать очень полезный и простой библиотеку Пикассо:

Picasso.with(context) 
    .load(url) 
    .placeholder(R.drawable.user_placeholder) 
    .error(R.drawable.user_placeholder_error) 
    .into(imageView); 

Если вы используете Android Studio и Gradle просто добавьте в Gradle файл уровня приложения:

compile 'com.squareup.picasso:picasso:2.5.2' 

Самая свежая версия доступна на Github.

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

  • Нет связанных вопросов^_^