【问题标题】:Bad casts of object references: unchecked/unconfirmed cast对象引用的错误转换:未经检查/未经确认的转换
【发布时间】:2016-03-23 22:22:13
【问题描述】:

考虑下面的代码:

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView =  (ImageView) convertView; //here

        if (imageView == null) {
            imageView = (ImageView) inflater.inflate(R.layout.item_gallery_image, parent, false);
        }
        ImageLoader.getInstance().displayImage(IMAGE_URLS[position], imageView, options);
        return imageView;
    }

Android Studio 的 Findbugs 插件抱怨 getview 方法的第一行,它说:

未经检查/未经确认的演员表 此强制转换是未经检查的,并且并非所有类型转换的实例都可以转换为它被转换为的类型。检查您的程序逻辑是否确保此转换不会失败。

关于如何解决此问题的任何想法?

【问题讨论】:

    标签: java android casting findbugs


    【解决方案1】:

    如果你想取悦 FindBugs,你可以断言 convertView 是一个 ImageView。

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.item_gallery_image, parent, false);
        }
        assert convertView instanceof ImageView : convertView;
        ImageLoader.getInstance().displayImage(IMAGE_URLS[position], (ImageView) imageView, options);
        return imageView;
    }
    

    【讨论】:

      【解决方案2】:

      并非每个View 都是ImageView,因此 FindBugs 试图警告您该演员可能会导致ClassCastException

      但是,您实际上无法获得ClassCastException,因为convertView 的工作方式是您要么收到null,要么收到以前由getView() 方法返回的View。因为你的方法总是返回一个ImageView,所以一切都很好。

      FindBugs 发现您的代码潜在 问题,有时它们实际上根本不是问题。

      【讨论】:

      • 谢谢老兄的回答!
      • 没问题。很高兴我能帮上忙
      【解决方案3】:

      我认为您尝试用图像填充 listView 或回收视图的每一行...首先您应该制作包含图像视图的布局,然后您可以这样做:

      @Override
          public View getView(int position, View convertView, ViewGroup parent) {
              view=inflater.inflate(R.layout.adapter_row,parent,false);
              ImageView mImage=(ImageView) view.findViewById(R.id.imageid);
              ImageLoader.getInstance().displayImage(IMAGE_URLS[position], mImage, options);
              return view;
      }
      

      【讨论】:

        猜你喜欢
        • 2013-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多