2017-10-17 112 views
0

所以,我正在創建一個網格視圖。java.lang.IndexOutOfBoundsException:索引:0,大小:0?

此活動的想法是通過使用網格視圖進入要顯示的目錄,該網格視圖將顯示我照片的照片。它假設正確地顯示,我會從網格視圖中選擇圖像

但是相反,當我進入崩潰的活動,並重新啓動應用程序

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) 

這裏的源

第一代碼:

錯誤3的
setImage(imgURLs.get(0), galleryImage, mAppend); 

二:

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

三:

setupGridView(directories.get(position)); 

這裏是整個代碼:

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

顯示照片的從我的手機 – Dnique

回答

2

java.lang.IndexOutOfBoundsException:指數:0,大小:0

您是using:

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

這意味着imgURLs有0個元素。
使用imgURLs.get(0)只是檢查是否有例如第一個元素之前:

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

是的,我明白,但我爲什麼我的應用程序崩潰,完全失去了 – Dnique

+0

我真不」理解你的評論。該應用程序崩潰,因爲您的問題中報告的確切例外。 –

+0

我該怎麼辦? – Dnique

相關問題