正在使用此自定义适配器显示youtube缩略图。
public class MyMedyaAdapter extends SimpleAdapter {
Context context;
int layout;
List<? extends Map<String, ?>> data;
String[] from;
int[] to;
String resimURL = "http://img.youtube.com/vi/{0}/0.jpg";
public MyMedyaAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
this.context = context;
this.layout = resource;
this.data = data;
this.from = from;
this.to = to;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(layout, parent, false);
TextView metin = (TextView) rowView.findViewById(R.id.row_medya_text);
String baslik = data.get(position).get(from[0]) + "";
baslik = baslik.replace(".pdf", "");
metin.setText(baslik);
if (from.length > 1) {
final ImageView resim = (ImageView) rowView.findViewById(R.id.row_medya_image);
final int p2 = position;
String resimID = data.get(p2).get(from[1])+"";
String rowImage = resimURL.replace("{0}", resimID);
try {
Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(rowImage).getContent());
resim.setImageBitmap(bitmap);
} catch (Exception e) {
// TODO: handle exception
}
}
return rowView;
}
}
使用此代码将适配器添加到listview;
public class VideoThered extends AsyncTask<Void, Void, MyMedyaAdapter> {
@Override
protected MyMedyaAdapter doInBackground(Void... params) {
List<HashMap<String, String>> response = new ArrayList<HashMap<String, String>>();
try {
//JSON request
response = new JsonHelper().GetVideoEntitys();
} catch (Exception e) {
response = null;
}
if (response != null) {
adapter = new MyMedyaAdapter(ctx, response, R.layout.row_medya, from, to);
}
else
{
adapter = null;
}
return adapter;
}
@Override
protected void onPostExecute(MyMedyaAdapter result) {
if (result != null) {
//StrictMode$AndroidBlockGuardPolicy.onNetwork() error with this line on honeycomb
listVideolar.setAdapter(adapter);
}
}
}
我收到/StrictMode$AndroidBlockGuardPolicy.onNetwork()错误。
如何设法从网上显示行图像而不会出现此错误?
我正在使用来自AsyncTask的listview主数据。 在此数据列表中,每个项目都有一个唯一的YouTube视频ID。有了这个id我正在从网上获取视频缩略图。但在我的自定义适配器上没有使用AsyncTask。我知道这就是问题所在。 但是,如何管理我的自定义适配器以使用AsyncTask?
答案 0 :(得分:3)
您收到错误是因为您在UI线程中进行了网络访问。这被认为是不好的,因为网络访问需要很长时间,因此会阻止UI。
要解决此问题,您可以编写AsyncTask
,在doInBackground
方法中从网络中提取数据,然后在onPostExecute
中使用位图/ drawable填充视图。
我认为Android文档有一个这种情况的例子,但我现在找不到它。
您还可以在我的Zwitscher应用中查看此source code snippet,DownloadUserImageTask
;从传递的User对象中检索url。然后将图片添加到
userPictureView.setImageBitmap(result);