我需要使用ActionBar,所以我需要将targetSdkVersion更改为11。 它目前是targetSdkVersion =“8”。 它可以正常使用targetSdkVersion =“8”,但当我将其更改为targetSdkVersion =“11”时,它会崩溃。
错误源自此行: imageA = new ImageAdapter(this,url);
错误:
我已经尝试在AsyncTask中封装几乎所有方法<> ,不再抛出错误,但ImageAdapter()(从未调用)在我这样做时不起作用。
以下是代码片段。
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.home);
title = (TextView)findViewById(R.id.title);
description = (TextView)findViewById(R.id.description);
gridView = (GridView)findViewById(R.id.propGridView);
thumbNail = (ImageView)findViewById(R.id.propertyThumbnail);
//thumbNail.setImageBitmap(bm);
gridView.setVerticalSpacing(3);
gridView.setHorizontalSpacing(3);
//checkHistory();
ImageDownloader.Mode mode = ImageDownloader.Mode.CORRECT;
historyStack.pushValue(url); // Push Value onto history stack
Log.i("No history:",url+" "+historyStack.getStack().size()); //Debug
imageA= new ImageAdapter(this,url);
imageA.getImageDownloader().setMode(mode); //Set download mode to cache
gridView.setAdapter(imageA); //Populate gridView with downloaded bitmap
}
public class ImageAdapter extends BaseAdapter {
//intialize variables
private final ImageDownloader imageDownloader ;
private int SIZE;
private List<Video> myVideos;
private Context mContext;
private String xmlurl;
private Parser parser = new Parser();
/*
* Constructor
* @params: Context
* @params: XML url
*/
public ImageAdapter(Context c, String url){
mContext = c;
xmlurl = url;
parser.runParser(xmlurl);
imageDownloader = new ImageDownloader();
}
/*
* (non-Javadoc)
* @see android.widget.Adapter#getView(int, android.view.View, android.view.ViewGroup)
*/
public View getView(final int position, View convertView, ViewGroup parent) {
final ImageView view;
if (convertView == null) {
view= new ImageView(mContext);
view.setLayoutParams(new GridView.LayoutParams(175,175));
view.setPadding(1, 1, 1, 1);
}
else{
view = (ImageView)convertView;
}
Log.i("Assingning view","");
imageDownloader.download(parser.getList().get(position).getThumbNail(),view);
return view;
}
/*
* (non-Javadoc)
* @see android.widget.Adapter#getCount()
*/
public int getCount() {
SIZE = parser.getCount();
return SIZE;
}
/*
* (non-Javadoc)
* @see android.widget.Adapter#getItem(int)
*/
public String getItem(int position) {
return myVideos.get(position).toString();
}
/*
* (non-Javadoc)
* @see android.widget.Adapter#getItemId(int)
*/
public long getItemId(int position) {
return 0;
}
public void setUrl(String url){
xmlurl = url;
}
/*
* getMethod
*/
public ImageDownloader getImageDownloader() {
return imageDownloader;
}
}
答案 0 :(得分:2)
看看异常
Android.os.NetworkOnMainThreadException
它告诉你究竟出了什么问题。您正尝试在主UI线程上执行网络活动(下载图像)。在之前的Android版本中,这是允许的,而不考虑设备性能。因为在UI线程上下载会严重影响应用程序的性能,所以不建议这样做,因为在以后的Android版本中会抛出您在上面看到的错误。
将图像下载到单独的线程中,此错误将消失。
答案 1 :(得分:0)
您应该在线程中编写imageDownloader,或者如果您想立即运行代码,请添加OnCreate:
StrictMode.setThreadPolicy(
new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().detectAll().permitNetwork().build());
这允许运行您的代码,但不建议使用。