Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么我的程序在更改targetSdkVersion时崩溃?_Android - Fatal编程技术网

Android 为什么我的程序在更改targetSdkVersion时崩溃?

Android 为什么我的程序在更改targetSdkVersion时崩溃?,android,Android,我需要利用一个ActionBar,所以我需要将targetSdkVersion更改为11。 它当前是targetSdkVersion=“8”它与targetSdkVersion=“8”配合使用效果良好,但当我将其更改为targetSdkVersion=“11”时,它会崩溃 错误源于此行:imageA=newimageadapter(此url) 错误: 03-21 22:09:56.710:E/AndroidRuntime(21824):java.lang.RuntimeException:无法

我需要利用一个ActionBar,所以我需要将targetSdkVersion更改为11。 它当前是targetSdkVersion=“8”它与targetSdkVersion=“8”配合使用效果良好,但当我将其更改为targetSdkVersion=“11”时,它会崩溃

错误源于此行:imageA=newimageadapter(此url)

错误:

  • 03-21 22:09:56.710:E/AndroidRuntime(21824):java.lang.RuntimeException:无法启动活动组件信息{com.ameba.api/com.ameba.api.Home}:android.os.NetworkOnMainThreadException
我尝试过将几乎所有方法封装到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;
}



  }
public void onCreate(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);
缩略图=(ImageView)findViewById(R.id.propertyThumbnail);
//缩略图.setImageBitmap(bm);
gridView.setVerticalSpacing(3);
gridView.setHorizontalSpacing(3);
//检查历史();
ImageDownloader.Mode模式=ImageDownloader.Mode.CORRECT;
historyStack.pushValue(url);//将值推送到历史堆栈上
Log.i(“无历史记录:”,url+“”+historyStack.getStack().size());//调试
imageA=新的ImageAdapter(此,url);
imageA.getImageDownloader().setMode(mode);//将下载模式设置为缓存
setAdapter(imageA);//用下载的位图填充gridView
}  
公共类ImageAdapter扩展了BaseAdapter{
//初始化变量
私人最终图像下载器图像下载器;
私有整数大小;
私人名单;
私有上下文;
私有字符串xmlurl;
私有解析器=新解析器();
/*
*建造师
*@params:Context
*@params:XML-url
*/
公共ImageAdapter(上下文c,字符串url){
mContext=c;
xmlurl=url;
runParser(xmlurl);
imageDownloader=新的imageDownloader();
}
/*
*(非Javadoc)
*@see android.widget.Adapter#getView(int,android.view.view,android.view.ViewGroup)
*/
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
最终图像视图;
if(convertView==null){
视图=新图像视图(mContext);
view.setLayoutParams(新的GridView.LayoutParams(175175));
视图。设置填充(1,1,1,1);
}
否则{
视图=(图像视图)转换视图;
}
Log.i(“assingview”,简称“);
下载(parser.getList().get(position.getThumbNail(),view);
返回视图;
}
/*
*(非Javadoc)
*@see android.widget.Adapter#getCount()
*/
public int getCount(){
SIZE=parser.getCount();
返回大小;
}
/*
*(非Javadoc)
*@see android.widget.Adapter#getItem(int)
*/
公共字符串getItem(int位置){
返回myVideos.get(position.toString();
}
/*
*(非Javadoc)
*@see android.widget.Adapter#getItemId(int)
*/
公共长getItemId(int位置){
返回0;
}
公共void setUrl(字符串url){
xmlurl=url;
}
/*
*getMethod
*/
公共ImageDownloader getImageDownloader(){
返回图像下载器;
}
}

查看异常

Android.os.NetworkOnMainThreadException
它确切地告诉你出了什么问题。您正试图在主UI线程上执行网络活动(下载图像)。在以前的Android版本中,这是允许的,不考虑设备性能。由于在UI线程上下载会严重影响应用程序的性能,因此不鼓励这样做,并且在更高版本的Android中会抛出上面所示的错误


将图像下载移动到单独的线程中,此错误将消失

您应该在线程中对imageDownloader进行编程,或者如果您想立即运行代码,请在创建时加载项:

  StrictMode.setThreadPolicy(
            new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().detectAll().permitNetwork().build());

这允许您运行代码,但不建议您这样做。

是的,我这样做了,并且不再抛出错误。但是,图像不再出现。请查看一些源代码,以执行惰性图像加载。如果你实现它,你将有一个很好的,快速的即插即用图像加载器为你的活动。它也相当有效。这将防止您在下载完成时处理回调,以及管理您的ImageView,我认为这是您遇到问题的地方,并使您的图像现在显示感谢您的帮助。我实现了lazy loader示例。它在模拟器上工作,但不在设备上显示图像。您确定设备上的连接良好吗?您是否具有清单中指定的internet权限?您的设备是否有外部存储器?