Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.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 从url加载图像,但ANR显示并强制关闭应用程序_Android_Xml Parsing_Image Loading_Android Anr Dialog - Fatal编程技术网

Android 从url加载图像,但ANR显示并强制关闭应用程序

Android 从url加载图像,但ANR显示并强制关闭应用程序,android,xml-parsing,image-loading,android-anr-dialog,Android,Xml Parsing,Image Loading,Android Anr Dialog,嗨,我的应用程序是关于解析xml文件,然后从url加载图像和文本,并在列表视图中显示,但每当我从url加载图像时,在向下滚动列表视图时,它无法正确加载图像,并强制关闭应用程序。现在如何克服这种情况。请帮助这里是我的代码下载图片从网址和文本 public class NewsRowAdapter extends ArrayAdapter<Item> { LoadingImage loadingImage; Bitmap bitmap = null; priva

嗨,我的应用程序是关于解析xml文件,然后从url加载图像和文本,并在列表视图中显示,但每当我从url加载图像时,在向下滚动列表视图时,它无法正确加载图像,并强制关闭应用程序。现在如何克服这种情况。请帮助这里是我的代码下载图片从网址和文本

public class NewsRowAdapter extends ArrayAdapter<Item> 
{
    LoadingImage loadingImage;
    Bitmap bitmap = null;
    private Activity activity;
    private List<Item> items;
    private Item objBean;
    private int row;
    /*private DisplayImageOptions options;
    ImageLoader imageLoader;*/

    public NewsRowAdapter(Activity act, int resource, List<Item> arrayList) 
    {
        super(act, resource, arrayList);
        this.activity = act;
        this.row = resource;
        this.items = arrayList;

        /*options = new DisplayImageOptions.Builder().showStubImage(R.drawable.blank).showImageForEmptyUrl(R.drawable.blank).cacheInMemory().cacheOnDisc().build();
        imageLoader = ImageLoader.getInstance();*/


    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent)
    {
        View view = convertView;
        ViewHolder holder;
        if (view == null) 
        {
            LayoutInflater inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(row, null);

            holder = new ViewHolder();
            view.setTag(holder);
        } else 
        {
            holder = (ViewHolder) view.getTag();
        }

        if ((items == null) || ((position + 1) > items.size()))
            return view;

        objBean = items.get(position);

        holder.tvTitle = (TextView) view.findViewById(R.id.tvtitle);
        holder.tvDesc = (TextView) view.findViewById(R.id.tvdesc);
        holder.tvDate = (TextView) view.findViewById(R.id.tvdate);
        holder.imgView = (ImageView) view.findViewById(R.id.image);
        holder.pbar = (ProgressBar) view.findViewById(R.id.pbar);

        if (holder.tvTitle != null && null != objBean.getTitle() && objBean.getTitle().trim().length() > 0) 
        {
            holder.tvTitle.setText(Html.fromHtml(objBean.getTitle()));
        }
        if (holder.tvDesc != null && null != objBean.getDesc()
                && objBean.getDesc().trim().length() > 0) {
            holder.tvDesc.setText(Html.fromHtml(objBean.getDesc()));
        }
        if (holder.tvDate != null && null != objBean.getPubdate() && objBean.getPubdate().trim().length() > 0)
        {
            holder.tvDate.setText(Html.fromHtml(objBean.getPubdate()));
        }
        if (holder.imgView != null) 
        {
            if (null != objBean.getLink() && objBean.getLink().trim().length() > 0) 
            {
                final ProgressBar pbar = holder.pbar;
                pbar.setVisibility(View.INVISIBLE);
                //---------CHANGES MADE FOR LOADING IMAGE----------//
                Log.d("IMAGE NULL----------", objBean.getLink());


                try 
                {

                    URL linkurl = new URL(objBean.getLink());

                    bitmap = BitmapFactory.decodeStream(linkurl.openConnection().getInputStream());

                    holder.imgView.setImageBitmap(bitmap);

                } catch (MalformedURLException e) 
                {
                    e.printStackTrace();

                } catch (IOException e) 
                {
                    e.printStackTrace();
                }


                /*try 
                {
                    loadBitmap(objBean.getLink());

                } catch (IOException e) 
                {
                    e.printStackTrace();
                }
                */

                /*imageLoader.init(ImageLoaderConfiguration.createDefault(activity));
                imageLoader.displayImage(objBean.getLink(), holder.imgView, options, new ImageLoadingListener()
                {
                            @Override
                            public void onLoadingComplete() 
                            {
                                pbar.setVisibility(View.INVISIBLE);

                            }

                            @Override
                            public void onLoadingFailed() 
                            {
                                pbar.setVisibility(View.INVISIBLE);
                            }

                            @Override
                            public void onLoadingStarted()
                            {
                                pbar.setVisibility(View.VISIBLE);

                            }
                });*/

            } else 
            {
                holder.imgView.setImageResource(R.drawable.ic_launcher);
            }
        }

        return view;
    }





    public class ViewHolder
    {

        public TextView tvTitle, tvDesc, tvDate;
        private ImageView imgView;
        private ProgressBar pbar;

    }

} 
公共类NewsRowAdapter扩展了ArrayAdapter
{
加载图像加载图像;
位图=空;
私人活动;
私人清单项目;
私有项objBean;
私人int row;
/*私有显示图像选项;
图像加载器*/
公共NewsRowAdapter(活动行为、int资源、列表arrayList)
{
超级(act、资源、arrayList);
这个活动=行动;
this.row=资源;
this.items=arrayList;
/*options=new DisplayImageOptions.Builder().showStubImage(R.drawable.blank).showImageForEmptyUrl(R.drawable.blank).cacheInMemory().cacheOnDisc().build();
imageLoader=imageLoader.getInstance()*/
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图)
{
视图=转换视图;
视窗座;
如果(视图==null)
{
LayoutInflater充气器=(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气器\u服务);
视图=充气机。充气(行,空);
holder=新的ViewHolder();
视图.设置标签(支架);
}否则
{
holder=(ViewHolder)view.getTag();
}
if((items==null)| |((position+1)>items.size())
返回视图;
objBean=items.get(位置);
holder.tvTitle=(TextView)view.findViewById(R.id.tvTitle);
holder.tvDesc=(TextView)view.findViewById(R.id.tvDesc);
holder.tvDate=(TextView)view.findViewById(R.id.tvDate);
holder.imgView=(ImageView)view.findViewById(R.id.image);
holder.pbar=(ProgressBar)view.findViewById(R.id.pbar);
if(holder.tvTitle!=null&&null!=objBean.getTitle()&&objBean.getTitle().trim().length()>0)
{
holder.tvTitle.setText(Html.fromHtml(objBean.getTitle());
}
if(holder.tvDesc!=null&&null!=objBean.getDesc()
&&objBean.getDesc().trim().length()>0){
holder.tvdsc.setText(Html.fromHtml(objBean.getDesc());
}
if(holder.tvDate!=null&&null!=objBean.getPubdate()&&objBean.getPubdate().trim().length()>0)
{
holder.tvDate.setText(Html.fromHtml(objBean.getPubdate());
}
if(holder.imgView!=null)
{
if(null!=objBean.getLink()&&objBean.getLink().trim().length()>0)
{
最终进度条pbar=holder.pbar;
pbar.setVisibility(视图不可见);
//---------加载图像时所做的更改----------//
Log.d(“IMAGE NULL------”,objBean.getLink());
尝试
{
URL linkurl=新URL(objBean.getLink());
位图=BitmapFactory.decodeStream(linkurl.openConnection().getInputStream());
holder.imgView.setImageBitmap(位图);
}捕获(格式错误)
{
e、 printStackTrace();
}捕获(IOE异常)
{
e、 printStackTrace();
}
/*试一试
{
加载位图(objBean.getLink());
}捕获(IOE异常)
{
e、 printStackTrace();
}
*/
/*init(ImageLoaderConfiguration.createDefault(活动));
displayImage(objBean.getLink(),holder.imgView,options,new ImageLoadingListener())
{
@凌驾
public void onload完成()
{
pbar.setVisibility(视图不可见);
}
@凌驾
public void onload失败()
{
pbar.setVisibility(视图不可见);
}
@凌驾
public void onLoadingStarted()
{
pbar.setVisibility(View.VISIBLE);
}
});*/
}否则
{
holder.imgView.setImageResource(R.drawable.ic_启动器);
}
}
返回视图;
}
公共类视图持有者
{
公共文本视图tvTitle、tvDesc、tvDate;
私有图像视图imgView;
私人银行;
}
} 

使用AsyncTask下载图像。
选中此复选框:

如果您正在UI线程上运行网络操作,请尝试创建一个异步任务来完成该作业,或创建一个线程。这很容易,你所要做的就是把代码移过去

由于您在适配器上使用此选项,这意味着您将填充一个项目列表,因此您可能需要查看。因为您希望避免listviews getView问题的常规问题

还有一些开源库可以帮助将URL加载到图像中。例如,它可以帮助你做得很好。只需从适配器调用:

        if (holder.imgView != null) {
        if (null != objBean.getLink() && objBean.getLink().trim().length() > 0) {
            final ProgressBar pbar = holder.pbar;
            pbar.setVisibility(View.INVISIBLE);
            //---------CHANGES MADE FOR LOADING IMAGE----------//
            Log.d("IMAGE NULL----------", objBean.getLink());

            String linkurl = new URL(objBean.getLink().toString());
            UrlImageViewHelper.setUrlDrawable(holder.imgView, linkurl, R.id.your_default_drawable);

        }

是的,它会起作用的。它将在一个线程(而不是UI线程)中完成下载过程,而您试图在UI线程中执行此操作,这将导致错误。是的,我终于做到了。谢谢您,经过几天的努力,我终于完成了此操作。非常感谢:-)@user1744952