Java.lang.IndexOutOfBoundsException: Недопустимый индекс 1, размер 0 Android Studio

Your Royal Highness спросил: 13 июня 2018 в 10:42 в: java

Я продолжаю получать эту ошибку, и когда я нажимаю ссылку, чтобы показать мне ошибку, весь файл не имеет ошибок , предупреждения или даже опечатки. Я попытался добавить, удалить и изменить некоторые вещи, и я получаю ту же самую точную ошибку. Это приложение для социальных сетей. Камера - это единственное, что вызывает у меня проблемы. Любая помощь, пожалуйста?

tabian.com.hash E/AndroidRuntime: FATAL EXCEPTION: main
Process: tabian.com.hash, PID: 29587
java.lang.IndexOutOfBoundsException: Invalid index 1, size is 0
    at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
    at java.util.ArrayList.get(ArrayList.java:308)
    at tabian.com.hash.Share.GalleryFragment.setupGridView(GalleryFragment.java:159)
    at tabian.com.hash.Share.GalleryFragment.access$300(GalleryFragment.java:38)
    at tabian.com.hash.Share.GalleryFragment$3.onItemSelected(GalleryFragment.java:134)

Нижние три ошибки - это то, на чем я в основном сосредоточен.

public class GalleryFragment extends Fragment {
private static final String TAG = "GalleryFragment";//constants
private static final int NUM_GRID_COLUMNS = 3;//widgets
private GridView gridView;
private ImageView galleryImage;
private ProgressBar mProgressBar;
private Spinner directorySpinner;//vars
private ArrayList<String> directories;
private String mAppend = "file:/";
private String mSelectedImage;@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_gallery, container, false);
    galleryImage = view.findViewById(R.id.galleryImageView);
    gridView = view.findViewById(R.id.gridView);
    directorySpinner = view.findViewById(R.id.spinnerDirectory);
    mProgressBar = view.findViewById(R.id.progressBar);
    mProgressBar.setVisibility(View.GONE);
    directories = new ArrayList<>();
    Log.d(TAG, "onCreateView: started.");    ImageView shareClose = view.findViewById(R.id.ivCloseShare);
    shareClose.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d(TAG, "onClick: closing the gallery fragment.");
            Objects.requireNonNull(getActivity()).finish();
        }
    });    TextView nextScreen = view.findViewById(R.id.tvNext);
    nextScreen.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d(TAG, "onClick: navigating to the final share screen.");            if(isRootTask()){
                Intent intent = new Intent(getActivity(), NextActivity.class);
                intent.putExtra(getString(R.string.selected_image), mSelectedImage);
                startActivity(intent);
            }else{
                Intent intent = new Intent(getActivity(), AccountSettingsActivity.class);
                intent.putExtra(getString(R.string.selected_image), mSelectedImage);
                intent.putExtra(getString(R.string.return_to_fragment), getString(R.string.edit_profile_fragment));
                startActivity(intent);
                Objects.requireNonNull(getActivity()).finish();
            }        }
    });    init();    return view;
}private boolean isRootTask(){
    return ((ShareActivity) Objects.requireNonNull(getActivity())).getTask() == 0;
}private void init(){
    FilePaths filePaths = new FilePaths();    //check for other folders inside "/storage/emulated/0/pictures"
    if (FileSearch.getDirectoryPaths(filePaths.PICTURES) != null) {
        directories = FileSearch.getDirectoryPaths(filePaths.PICTURES);
    }
    directories.add(filePaths.CAMERA);    ArrayList<String> directoryNames = new ArrayList<>();
    for (int i = 0; i < directories.size(); i++) {
        Log.d(TAG, "init: directory: " + directories.get(i));
        int index = directories.get(i).lastIndexOf("/");
        String string = directories.get(i).substring(index);
        directoryNames.add(string);
    }    ArrayAdapter<String> adapter = new ArrayAdapter<>(Objects.requireNonNull(getActivity()),
            android.R.layout.simple_spinner_item, directoryNames);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    directorySpinner.setAdapter(adapter);    directorySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            Log.d(TAG, "onItemClick: selected: " + directories.get(position));            //setup our image grid for the directory chosen
            setupGridView(directories.get(position));
        }        @Override
        public void onNothingSelected(AdapterView<?> parent) {        }
    });
}private void setupGridView(String selectedDirectory){
    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(1), galleryImage, mAppend);
        mSelectedImage = imgURLs.get(1);
    }catch (ArrayIndexOutOfBoundsException e){
        Log.e(TAG, "setupGridView: ArrayIndexOutOfBoundsException: " +e.getMessage() );
    }    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);
        }
    });}private void setImage(String imgURL, ImageView image, String append){
    Log.d(TAG, "setImage: setting image");    ImageLoader imageLoader = ImageLoader.getInstance();    imageLoader.displayImage(append + imgURL, image, new ImageLoadingListener() {
        @Override
        public void onLoadingStarted(String imageUri, View view) {
            mProgressBar.setVisibility(View.VISIBLE);
        }        @Override
        public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
            mProgressBar.setVisibility(View.INVISIBLE);
        }        @Override
        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
            mProgressBar.setVisibility(View.INVISIBLE);
        }        @Override
        public void onLoadingCancelled(String imageUri, View view) {
            mProgressBar.setVisibility(View.INVISIBLE);
        }
    });
}
}

2 ответа

Your Royal Highness ответил: 13 июня 2018 в 11:35
Пожалуйста, проверьте мои комментарии
Dmitry Sitnikov ответил: 13 июня 2018 в 10:53

@andreas является правильным, ваш imgURLs пуст, и причина, по которой вы получаете position == 1 для пустого адаптера, вероятно, что у вас есть верхние и нижние колонтитулы.

Your Royal Highness ответил: 14 июня 2018 в 12:59
что я должен положить в imgURLs?
Dmitry Sitnikov ответил: 14 июня 2018 в 08:56
| & GT; У меня было это на 0, но затем я изменил его на 1, чтобы увидеть, что изменится. Затем я рекомендую удалить ошибочную трассировку стека из вопроса и опубликовать реальное, чтобы помочь людям понять вашу проблему. | & GT; , что я должен помещать в imgURLs Любые допустимые URL-адреса. Список не должен быть пустым. Вот и все. Обратите внимание на комментарий Андреаса, номер первого элемента в массиве равен 0, а не 1, поэтому код после //set the first image to be displayed when the activity fragment view is inflated оказывается сломанным.

Дополнительное видео по вопросу: Java.lang.IndexOutOfBoundsException: Недопустимый индекс 1, размер 0 Android Studio

Build MyDoes App Android Studio Tutorial - Part 1

Урок 5. Файл макета экрана android-приложения в XML виде. Поворот устройства | Android Studio

Invite Friend UI Animation Adobe Xd to Android Studio Tutorial