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();
手段'gridAdapter'是'null' 。請在顯示更多代碼的地方創建類 –
的gridAdapter對象將insertImageAudioList設置爲null的可能性 – Anjali
這就是爲什麼我要求在沒有選擇任何圖像的情況下按下刪除按鈕時,應用程序崩潰。所以如何處理它。 –