Java ArrayIndexOutOfBounds异常,即使在异常处理之后也是如此
所以我在一个片段中填充了一个网格视图,我有一个微调器,其中列出了文件夹选项 每当我选择一个没有文件的文件夹时,应用程序就会崩溃,导致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
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
}