簡體   English   中英

對象引用的錯誤轉換:未經檢查/未經確認的轉換

[英]Bad casts of object references: unchecked/unconfirmed cast

考慮下面的代碼:

    @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 方法的第一行,它說:

Unchecked/unconfirmed cast 此轉換是未檢查的,並非所有類型的實例都可以轉換為它正在轉換的類型。 檢查您的程序邏輯是否確保此轉換不會失敗。

有關如何解決此問題的任何想法?

如果你想取悅 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;
}

並非每個View都是ImageView ,因此 FindBugs 試圖警告您強制轉換可能會導致ClassCastException

但是,您實際上無法獲得ClassCastException因為convertView工作方式是您要么接收null ,要么接收先前由getView()方法返回的View 由於您的方法總是返回一個ImageView ,所以一切都很好。

FindBugs 會發現您的代碼的潛在問題,有時它們實際上根本不是問題。

我認為您嘗試用圖像填充 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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM