android - 在 Android 中单击按钮时出现 NullPointerException

标签 android

我有带有图像的 GridView ,我选择了多个图像并在主 Activity 中的按钮单击事件中删除了选定的图像。但是没有选择任何图像按下按钮得到空指针异常并且应用程序崩溃了。如何解决这个问题。这是我的按钮代码。提前致谢。

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

关于android - 在 Android 中单击按钮时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33819064/

相关文章:

android - React Native iOS 构建失败, "Multiple commands produce"错误

安卓 WebView : How do I horizontally scroll between different pages?

java - 将对象从服务发送到应用程序 - 处理程序

android - Gradle 错误 : unable to open zip file

java - Libgdx 在生成应用程序时卡住了

Android Kitkat Webview 只播放视频的声音

android - 在方向改变时保留 Fragment backstack

android - 如何在 WebView 中显示 Android Action Bar

c# - 无法在 visual studio 2015 中运行 android ddms

android - 我可以用构建器模式制作抽象 fragment 类吗?