Итак, я заполняю вид сетки во фрагменте, и у меня есть счетчик, в котором перечислены параметры папки
и всякий раз, когда я выбираю папку без файлов, приложение вылетает, выдавая исключение 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)
это функция, которую я написал для заполнения GridView
и, как вы можете заметить, он генерирует исключение ArrayIndexOutOfBounds
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);
}
});
}
даже вызов функции заключен в блок try и catch, который снова перехватывает исключение ArrayIndexOutOfBounds
try{
setupGridView(directories.get(position));
}
catch (ArrayIndexOutOfBoundsException aioobe) { }
}
это метод поиска по каталогам / файлам, на всякий случай
directories = new ArrayList<>();
функция пути к файлу
public static ArrayList<String> getFilePaths(String directory){
ArrayList<String> pathArray = new ArrayList<>();
File file = new File(directory);
File[] listfiles = file.listFiles();
for(int i = 0; i < listfiles.length; i++){
if(listfiles[i].isFile()){
pathArray.add(listfiles[i].getAbsolutePath());
}
}
return pathArray;
}
}
и путь к файлу класса
public class FilePaths {
//"storage/emulated/0"
public String ROOT_DIR = Environment.getExternalStorageDirectory().getPath();
public String PICTURES = ROOT_DIR + "/Pictures";
public String CAMERA = ROOT_DIR + "/DCIM/camera";
public String FIREBASE_IMAGE_STORAGE = "photos/users/";
}