Java ArrayIndexOutOfBounds异常,即使在异常处理之后也是如此

Java ArrayIndexOutOfBounds异常,即使在异常处理之后也是如此,java,android,exception-handling,file-handling,Java,Android,Exception Handling,File Handling,所以我在一个片段中填充了一个网格视图,我有一个微调器,其中列出了文件夹选项 每当我选择一个没有文件的文件夹时,应用程序就会崩溃,导致ArrayIndexOutOfBounds异常 FATAL EXCEPTION: main Process: manika.aditya.ekayana, PID: 13405 ja

所以我在一个片段中填充了一个网格视图,我有一个微调器,其中列出了文件夹选项

每当我选择一个没有文件的文件夹时,应用程序就会崩溃,导致ArrayIndexOutOfBounds异常

FATAL EXCEPTION: main
                         Process: manika.aditya.ekayana, PID: 13405
                                                                   java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
                                                                       at java.util.ArrayList.get(ArrayList.java:411)
                                                                       at manika.aditya.ekayana.Share.GalleryFragment.setupGridView(GalleryFragment.java:170)
                                                                       at manika.aditya.ekayana.Share.GalleryFragment.access$300(GalleryFragment.java:37)
                                                                       at manika.aditya.ekayana.Share.GalleryFragment$3.onItemSelected(GalleryFragment.java:142)
private void setupGridView(String selectedDirectory) throws ArrayIndexOutOfBoundsException {
    Log.d(TAG, "setupGridView: directory chosen: " + selectedDirectory);
    final ArrayList<String> imgURLs = FileSearch.getFilePaths(selectedDirectory);

    //set the grid column width
    int gridWidth = getResources().getDisplayMetrics().widthPixels;
    int imageWidth = gridWidth/NUM_GRID_COLUMNS;
    gridView.setColumnWidth(imageWidth);

    //use the grid adapter to adapter the images to gridview
    GridImageAdapter adapter = new GridImageAdapter(getActivity(), R.layout.layout_grid_imageview, mAppend, imgURLs);
    gridView.setAdapter(adapter);

    //set the first image to be displayed when the activity fragment view is inflated

    try{

        setImage(imgURLs.get(0), galleryImage, mAppend);

    }

    catch (ArrayIndexOutOfBoundsException aioobe){}

    mSelectedImage = imgURLs.get(0);
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.d(TAG, "onItemClick: selected an image: " + imgURLs.get(position));

            setImage(imgURLs.get(position), galleryImage, mAppend);
            mSelectedImage = imgURLs.get(position);
        }
    });

}
这是我用来填充GridView的函数

正如您所看到的,它抛出了一个ArrayIndexOutOfBounds异常

FATAL EXCEPTION: main
                         Process: manika.aditya.ekayana, PID: 13405
                                                                   java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
                                                                       at java.util.ArrayList.get(ArrayList.java:411)
                                                                       at manika.aditya.ekayana.Share.GalleryFragment.setupGridView(GalleryFragment.java:170)
                                                                       at manika.aditya.ekayana.Share.GalleryFragment.access$300(GalleryFragment.java:37)
                                                                       at manika.aditya.ekayana.Share.GalleryFragment$3.onItemSelected(GalleryFragment.java:142)
private void setupGridView(String selectedDirectory) throws ArrayIndexOutOfBoundsException {
    Log.d(TAG, "setupGridView: directory chosen: " + selectedDirectory);
    final ArrayList<String> imgURLs = FileSearch.getFilePaths(selectedDirectory);

    //set the grid column width
    int gridWidth = getResources().getDisplayMetrics().widthPixels;
    int imageWidth = gridWidth/NUM_GRID_COLUMNS;
    gridView.setColumnWidth(imageWidth);

    //use the grid adapter to adapter the images to gridview
    GridImageAdapter adapter = new GridImageAdapter(getActivity(), R.layout.layout_grid_imageview, mAppend, imgURLs);
    gridView.setAdapter(adapter);

    //set the first image to be displayed when the activity fragment view is inflated

    try{

        setImage(imgURLs.get(0), galleryImage, mAppend);

    }

    catch (ArrayIndexOutOfBoundsException aioobe){}

    mSelectedImage = imgURLs.get(0);
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.d(TAG, "onItemClick: selected an image: " + imgURLs.get(position));

            setImage(imgURLs.get(position), galleryImage, mAppend);
            mSelectedImage = imgURLs.get(position);
        }
    });

}
这是目录/文件搜索方法,以防万一

directories = new ArrayList<>();
}尝试更改此设置

try{

    setImage(imgURLs.get(0), galleryImage, mAppend);

}

catch (ArrayIndexOutOfBoundsException aioobe){}

mSelectedImage = imgURLs.get(0);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Log.d(TAG, "onItemClick: selected an image: " + imgURLs.get(position));

        setImage(imgURLs.get(position), galleryImage, mAppend);
        mSelectedImage = imgURLs.get(position);
    }
});
试试看{
setImage(imgURLs.get(0)、galleryImage、mAppend);
}
catch(ArrayIndexOutOfBoundsException aioobe){}
mSelectedImage=imgURLs.get(0);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Log.d(标记“onItemClick:选择了一个图像:”+imgURLs.get(位置));
setImage(imgURLs.get(位置)、galleryImage、mAppend);
mSelectedImage=imgURLs.get(位置);
}
});
进入这个

try{
    setImage(imgURLs.get(0), galleryImage, mAppend);
    mSelectedImage = imgURLs.get(0);
}
catch (ArrayIndexOutOfBoundsException aioobe){}

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        try {
            Log.d(TAG, "onItemClick: selected an image: " + imgURLs.get(position));
            setImage(imgURLs.get(position), galleryImage, mAppend);
            mSelectedImage = imgURLs.get(position);
        } 
        catch (ArrayIndexOutOfBoundsException aioobe){}
    }
});
试试看{
setImage(imgURLs.get(0)、galleryImage、mAppend);
mSelectedImage=imgURLs.get(0);
}
catch(ArrayIndexOutOfBoundsException aioobe){}
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
试一试{
Log.d(标记“onItemClick:选择了一个图像:”+imgURLs.get(位置));
setImage(imgURLs.get(位置)、galleryImage、mAppend);
mSelectedImage=imgURLs.get(位置);
} 
catch(ArrayIndexOutOfBoundsException aioobe){}
}
});

在从imgURLS获取索引之前,请检查imgURLS是否包含一些值

if(imgURLs.size()>0){              
    try{


                        setImage(imgURLs.get(0), galleryImage, mAppend);



                    mSelectedImage = imgURLs.get(0);
                    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                            Log.d(TAG, "onItemClick: selected an image: " + imgURLs.get(position));

                            setImage(imgURLs.get(position), galleryImage, mAppend);
                            mSelectedImage = imgURLs.get(position);
                        }
                    });

             catch (Exception EX){
            }
    }
else{
//No image url
}
if(imgURLs.size()>0){
试一试{
setImage(imgURLs.get(0)、galleryImage、mAppend);
mSelectedImage=imgURLs.get(0);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Log.d(标记“onItemClick:选择了一个图像:”+imgURLs.get(位置));
setImage(imgURLs.get(位置)、galleryImage、mAppend);
mSelectedImage=imgURLs.get(位置);
}
});
捕获(例外情况除外){
}
}
否则{
//没有图像url
}

}

您在哪一行获得此异常?它在我发布的日志中,您认为
mSelectedImage=imgURLs.get(0)是什么?(提示:跟随stacktrace)仍然是相同的错误
致命异常:主进程:manika.aditya.ekayana,PID:20316 java.lang.IndexOutOfBoundsException:Index:0,java.util.ArrayList.get(ArrayList.java:411)上的Size:0
请求原谅而不是许可在python中得到了很好的考虑,而在java中则更少。例外是昂贵的,所以考虑测试你的条件,而不是尝试…接住,问题解决了
final ArrayList imgURLs=FileSearch.getfilepath(selectedDirectory);IMGurlSize=imgURLs.size()然后我完全按照你说的做了,嗯,我在else语句中加了一个祝酒词。你为什么认为你需要尝试一下。。。捕获?以防在设置映像或单击映像时出现任何异常
if(imgURLs.size()>0){              
    try{


                        setImage(imgURLs.get(0), galleryImage, mAppend);



                    mSelectedImage = imgURLs.get(0);
                    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                            Log.d(TAG, "onItemClick: selected an image: " + imgURLs.get(position));

                            setImage(imgURLs.get(position), galleryImage, mAppend);
                            mSelectedImage = imgURLs.get(position);
                        }
                    });

             catch (Exception EX){
            }
    }
else{
//No image url
}