2017-10-17 4 views
0

Donc, je crée une vue en grille.java.lang.IndexOutOfBoundsException: Index: 0, Taille: 0?

L'idée de cette activité est d'entrer dans les répertoires qui vont être affichés en utilisant une vue en grille qui montrera mes photos de ma photo. Il est supposé afficher correctement les images que je choisirais de la vue sur la grille

Mais au lieu quand j'entrer dans l'activité, il se bloque et redémarre l'application

Logcat

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
                         at java.util.ArrayList.get(ArrayList.java:411) 
                         at com.example.dmckoy.myapplication.Search.GalleryFragment.setupGridView(GalleryFragment.java:133) 
                         at com.example.dmckoy.myapplication.Search.GalleryFragment.access$100(GalleryFragment.java:34) 
                         at com.example.dmckoy.myapplication.Search.GalleryFragment$3.onItemSelected(GalleryFragment.java:108) 

est ici la source de l'erreur 3:

premier code:

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

Deuxième:

public class GalleryFragment extends Fragment { 
    private static final String TAG = "GalleryFragment"; 

Troisième:

setupGridView(directories.get(position)); 

Voici le code entier:

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; 



    //var 
    private ArrayList<String> directories; 
    private String mAppend = "file:/"; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_gallery, container, false); 
     galleryImage = (ImageView) view.findViewById(R.id.galleryImageView); 
     gridView = (GridView) view.findViewById(R.id.gridView); 
     directorySpinner = (Spinner) view.findViewById(R.id.spinnerDirectory); 
     mProgressBar = (ProgressBar) view.findViewById(R.id.progressBar); 
     mProgressBar.setVisibility(View.GONE); 
     directories = new ArrayList<>(); 
     Log.d(TAG, "onCreateView: started. "); 

     ImageView shareClose = (ImageView) view.findViewById(R.id.ivCloseShare); 
     shareClose.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.d(TAG, "onClick: closing the gallery fragment. "); 
       getActivity().finish(); 
      } 
     }); 

     TextView nextScreen = (TextView) 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. "); 


      } 
     }); 
     init(); 

     return view; 
    } 

    private void init() { 
     FilePath filePath = new FilePath(); 

     //check for other folder inside "/storage/emulated/0/pictures 
     if (FileSearch.getDirectoryPaths(filePath.Picture) != null) { 
      directories = FileSearch.getDirectoryPaths(filePath.Picture); 
     } 

     directories.add(filePath.CAMERA); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), 
       android.R.layout.simple_spinner_item, directories); 
     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 image to gridview file:// 
     GridImageAdapter adapter = new GridImageAdapter(getActivity(), R.layout.layout_grid_imageview, mAppend, imgURLs); 
     gridView.setAdapter(adapter); 

     //set the first image to be displayed whent the activity fragment view is inflated 
     setImage(imgURLs.get(0), galleryImage, mAppend); 

     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); 
      } 
     }); 
    } 

    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); 
      } 
     }); 
    } 
} 
+0

montrent les années photo de mon téléphone – Dnique

Répondre

2

java.lang.IndexOutOfBoundsException: Indice 0, Taille: 0

Vous êtes using:

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

Cela signifie que imgURLs a 0 éléments.
Avant d'utiliser imgURLs.get(0) il suffit de vérifier si elle a le premier élément, par exemple:

if (imgURLs != null && imgURLs.size()>=1) { ... } 
+0

ouais je comprends, mais je suis complètement perdu la raison pour laquelle mon application plante – Dnique

+0

Je ne vraiment » Je comprends votre commentaire. L'application se bloque car il y a exactement l'exception signalée dans votre question. –

+0

Que dois-je faire? – Dnique