2015-11-20 52 views
2

我有圖像的網格視圖,我選擇了多個圖像,並刪除主活動按鈕單擊事件選定的圖像。但沒有選擇任何圖像按下按鈕得到空指針異常和應用程序崩潰。如何解決此問題。這裏是我的按鈕代碼。提前感謝。NullPointer異常在Android按鈕單擊

imgDeleteImagesFromGallery = (ImageView) findViewById(R.id.imgDeleteImage); 
imgDeleteImagesFromGallery.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) 
    { 
     ArrayList<String> selectedItems = gridAdapter.getCheckedItems(); 
     if(selectedItems.size() > 0) 
     { 
      Toast.makeText(AddPost.this, "Total photos selected: "+selectedItems.size(), Toast.LENGTH_SHORT).show(); 
      Log.e(AddPost.class.getSimpleName(), "Selected Items: " + selectedItems.toString()); 

      Iterator it = picsName.iterator(); 
      while (it.hasNext()) 
      { 
       strFilePath = it.next().toString(); 
       Log.e("strFilePath ", " strFilePath = " + strFilePath); 
       File file = new File(strFilePath); 
       if (file.exists()) 
       { 
        boolean result = file.delete(); 
        Log.e("File deleted ", " From classnkk_images = " + result); 
       } 
      } 

      gridAdapter.notifyDataSetChanged(); 
      int countImg = gridAdapter.getCount(); 
      textTotalImages.setText(Integer.toString(countImg)); 
     } 

    } 
}); 





class GridView_Adapter extends BaseAdapter { 

     private LayoutInflater mInflater; 
     SparseBooleanArray mSparseBooleanArray; 
     public GridView_Adapter() { 
      mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      mSparseBooleanArray = new SparseBooleanArray(); 
     } 

     public ArrayList<String> getCheckedItems() { 
      ArrayList<String> mTempArry = new ArrayList<String>(); 

      for(int i=0;i<insertImageAudioList.size();i++) { 
       if(mSparseBooleanArray.get(i)) { 
        mTempArry.add(insertImageAudioList.get(i)); 
       }} 
      return mTempArry; 
     } 

     public int getCount() { 
      return insertImageAudioList.size(); 
     } 

     public Object getItem(int position) { 
      return position; 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

     @Override 
     public View getView(final int position, View convertView, ViewGroup parent) 
     { 
      final ViewHolder holder; 
      if (convertView == null) 
      { 
       holder = new ViewHolder(); 
       convertView = mInflater.inflate(R.layout.add_post_grid_item_layout, parent , false); 
       holder.image = (ImageView) convertView.findViewById(R.id.image); 
       holder.checkbox = (CheckBox) convertView.findViewById(R.id.itemCheckBox); 
       convertView.setTag(holder); 
      } 
      else 
      { 
       holder = (ViewHolder) convertView.getTag(); 
      } 

      String strImagePosition = insertImageAudioList.get(position); 
      if (strImagePosition.endsWith(mp3_Pattern)) 
      { 
       Log.e("In if condition ","strImagePosition = "+strImagePosition); 
       holder.image.setImageResource(R.drawable.resize_audio_control); 

      } 
      if (strImagePosition.endsWith(png_Pattern) || strImagePosition.endsWith(jpg_pattern) || strImagePosition.endsWith(bmp_pattern) || strImagePosition.endsWith(gif_pattern) || strImagePosition.endsWith(jpeg_pattern)) 
      { 
       //Log.e("strImagePosition "," = "+strImagePosition); 
       String strBaseDir = Environment.getExternalStorageDirectory().getAbsolutePath(); 
       String filepath = strBaseDir + "/classnkk_images/" + strImagePosition; 
       File file = new File(filepath); 

        fileName.add(file.getAbsolutePath()); 
        Bitmap myBitmap = BitmapFactory.decodeFile(filepath); 
        holder.image.setImageBitmap(myBitmap); 
      } 


      holder.checkbox.setTag(position); 


      holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 

       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
       { 
        mSparseBooleanArray.put((Integer) buttonView.getTag(), isChecked); 
        int pos = (Integer) buttonView.getTag(); 
        if (!buttonView.isChecked()) 
        { 
         picsName.remove((String) insertImageAudioList.get(pos)); 
        } 
        else if (buttonView.isChecked()) 
        { 
         if (!picsName.contains((String) insertImageAudioList.get(pos))) 
         { 
          picsName.add((String) insertImageAudioList.get(pos)); 
         } 
        } 
        notifyDataSetChanged(); 

       } 
      }); 


      return convertView; 
     } 

     class ViewHolder 
     { 
      ImageView image; 
      CheckBox checkbox; 
      int id; 
     } 
    } 

錯誤在該行

ArrayList<String> selectedItems = gridAdapter.getCheckedItems(); 
+1

手段'gridAdapter'是'null' 。請在顯示更多代碼的地方創建類 –

+0

的gridAdapter對象將insertImageAudioList設置爲null的可能性 – Anjali

+0

這就是爲什麼我要求在沒有選擇任何圖像的情況下按下刪除按鈕時,應用程序崩潰。所以如何處理它。 –

回答

1

gridAdapter爲空

把此行作爲一線您的onClick方法內部

GridView_Adapter gridAdapter = new GridView_Adapter(); 
+0

感謝您的幫助! –