簡體   English   中英

在 Android 中單擊按鈕時出現 NullPointer 異常

[英]NullPointer Exception at button click in 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為空

將此行作為 onClick 方法中的第一行

GridView_Adapter gridAdapter = new GridView_Adapter();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM