[英]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.