2013-07-22 174 views
-2

我無法加載gridview上的圖像,它總是崩潰。登錄貓的消息 「ArrayIndexOutOfBoundsException異常長度= 16;指數= 16」
這裏是我的代碼:如何避免ArrayIndexOutOfBoundsException?

public Integer[] mThumbIds = { 
     R.drawable.pic_1, R.drawable.pic_2, 
     R.drawable.pic_3, R.drawable.pic_4, 
     R.drawable.pic_5, R.drawable.pic_6, 
     R.drawable.pic_7, R.drawable.pic_8, 
     R.drawable.pic_9, R.drawable.pic_10, 
     R.drawable.pic_11, R.drawable.pic_12, 
     R.drawable.pic_13, R.drawable.pic_14, 
     R.drawable.pic_15, R.drawable.pic_16, 
     R.drawable.pic_17, R.drawable.pic_18, 
     R.drawable.pic_19, R.drawable.pic_20, 
     ........ R.drawable.pic_96 
     }; 

代碼:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    int width = metrics.widthPixels/6; 
    int height = metrics.heightPixels/6; 

    ImageView i;  
     i = new ImageView(mContext); 
     i.setLayoutParams(new GridView.LayoutParams(height, height)); 
     i.setScaleType(ImageView.ScaleType.CENTER_CROP);       
    } 

    if(mImageSet == IMAGE_SET_ONE) {   
     Integer[] images1 = new Integer[16];   
     System.arraycopy(mThumbIds, 0, images1, 0, 16);  
     i.setImageResource(images1[position]); 
    } else if(mImageSet == IMAGE_SET_THREE) { 

    ...........  
} 

    return i;  
} 

請幫助我..

+0

什麼是調用代碼?我認爲它在getItem(int位置) – RNJ

+0

後失敗getView – Blackbelt

+1

數組索引從零開始。所以,一個16元素的數組從0到15. – GriffeyDog

回答

2

有一件事我會建議是,請確保position小於mThubIds數組長度以下方法。數組索引從零開始,如果位置大於(或)等於mThumbIds長度,則將獲得ArrayIndexOutofBoundsException

@Override 
public Object getItem(int position) { 
    return mThumbIds[position]; 
} 

例子:

@Override 
    public Object getItem(int position) { 
     if(position < mThumbIds.length){ 
     return mThumbIds[position]; 
     } 
     return null; 
    } 
+0

編譯錯誤,無法從getItem返回。 –

+0

@PeteBelford:正確,修正。感謝您指點。 – kosa

0
@Override 
public Object getItem(int position) { 
    if(position >= mThumbIds.length) return null; 
    return mThumbIds[position]; 
} 

請搬起石頭砸自己使用匈牙利命名法。

+0

他如何使用匈牙利符號?不會成爲'iwImgView'或'vMyImageView'嗎? :) – Shark

+0

mThumbIds,m爲會員。無論如何,這是可怕的。 –

+0

我認爲'm'-ing是一個C++的告訴。然後,我認爲如果我使用i.setImageResource(mThumbIds [position]),我認爲這是一種廉價學生的方式,不必使用'this.' – Shark

0
Integer[] images1 = new Integer[16];   
System.arraycopy(mThumbIds, 0, images1, 0, 16);  
i.setImageResource(images1[position]); 

您複製的第16 Integer,從裏面mThumbIdsimages1,但由於mThumbIds containse超過16種元素的position可以假設0和mThumbIds.lenght - 1之間的值。當職位是16時,您可以獲得ArrayIndexOutofBoundsExceptionYou should use i.setImageResource(mThumbIds[position]);

+0

;它不會佔用mThumbIds上的所有元素? –

+0

它將採用索引位置處的元素。你的目的是什麼? – Blackbelt

+0

我想從gridView的mThumbIds中加載16個圖像/元素。所以我先將16從mThumbIds複製到image1的數組image1和setImagesResources。 –