Я сделал расширяемый список, в котором дочерние (подпозиции) отображаются изображения из выпадающей папки или текста.Просмотр списка изображений в Расширяемом списке
Я хочу сделать то же самое с изображениями из Интернета. Поэтому я использовал asynctask, чтобы избежать NetworkOnMainThreadException
Этот код находится в моем ExpandableListAdapter, где я инициализирую элементы и подпозиции. Drawable и ImageView глобально определены так, чтобы все функции могли достичь их без отправки в качестве параметров.
Drawable drawable;
ImageView imgView;
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
String child = childList[groupPosition][childPosition];
if(child.equalsIgnoreCase("none")){
ImageView i = new ImageView(context);
i.setImageResource(R.drawable.blank_image_for_view_business);
i.setPadding(0, 0, 0, 0);
return i ;
}
else if(child.startsWith("http")){
imgView = new ImageView(context);
new asyTask();
return imgView;
}else{
TextView tv = new TextView(context);
tv.setText(childList[groupPosition][childPosition]);
tv.setPadding(30, 0, 0, 0);
return tv;
}
}
private Drawable LoadImageFromWeb(String url){
try{
InputStream is = (InputStream) new URL(url).getContent();
Drawable d = Drawable.createFromStream(is, "src name");
return d;
}catch (Exception e) {
System.out.println("Exc="+e);
return null;
}
}
И это мой асинхронный класс:
private class asyTask extends AsyncTask<String, Void, Integer> {
@Override
protected void onPreExecute() {
super.onPreExecute();
//show a progress bar
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
imgView.setImageDrawable(drawable);
}
@Override
protected Integer doInBackground(String... params) {
drawable = LoadImageFromWeb("http://www.ettinger.co.uk/var/ezflow_site/storage/images/collections/ettinger/ettinger-walkie-pen/lifestyle-navy-walkie-pen/navy-walkie-pen-gallery/wlkp_pens_navy-2/20569-2-eng-GB/wlkp_pens_navy-2.jpg");
return 0;
}
На данный момент в раздвижном списке я могу видеть только изображения из растяжимой папки и TextView, но нет изображений из Интернета. В чем проблема ?
У вас есть разрешение на использование в вашем AndroidManifest.xml? Также вы должны использовать обработчик для установки drawable для изображения. –
да, у меня есть разрешение на интернет. Как обработчик может помочь в этой ситуации? можете ли вы привести пример? – Asqan
Поскольку вы находитесь в другом потоке, кроме основного потока, вы не можете установить drawable. просто определите новый обработчик, прикрепленный к потоку пользовательского интерфейса, или вы можете использовать runonmainthread. activity.runOnUiThread (новый Runnable() { @Override общественности недействительным запуска() { // Ваш код выполняется в GUI потоке здесь } }); –