【问题标题】:java.lang.SecurityException in android studioandroid studio 中的 java.lang.SecurityException
【发布时间】:2021-03-22 07:59:35
【问题描述】:

我正在尝试删除多个项目,但问题是当单击警报对话框是删除这些项目时,所有选定的项目都将被删除,但对话框仍保留在屏幕上而不是关闭。当您在对话框上再次单击“是”时,它会出现错误。

List<ItemFiles> selectList = new ArrayList<>();

   ArrayList<String> delete = new ArrayList<>();
                            
              for (ItemFiles itemfiles1 : selectList) {
                    String idd = itemfiles1.getId();
                    delete.add(idd);
                    AlertDialog.Builder builder = new AlertDialog.Builder(activity);
                    builder.setCancelable(true)
                   .setMessage("Are you sure?")
                   .setPositiveButton("yes", new DialogInterface.OnClickListener() {
                       @Override
                         public void onClick(DialogInterface dialog, int which) {
                           for (String ss : delete) {
                              long long_id = Long.parseLong(ss);
                              Uri uri = ContentUris.withAppendedId(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, long_id);                                                                                                                                                
                              activity.getContentResolver.delete(uri, null, null);                                                           
                              itemfiles.remove(position);                                                           
                              notifyItemRemoved(position);

                     }
                    dialog.dismiss();
                }
             })
                    .setNegativeButton("no", null);

                   AlertDialog alertDialog = builder.create();
                    alertDialog.show();                                      
                    alertDialog.getButton(alertDialog.BUTTON_NEGATIVE)
                                            
                   .setTextColor(ContextCompat.getColor(activity, R.color.black));
                                    
                   alertDialog.getButton(alertDialog.BUTTON_POSITIVE)
                                            
                   .setTextColor(ContextCompat.getColor(activity, R.color.black));
                                }                      }

本例中的列表有 ids [1275, 1274] 将被删除并返回错误 java.lang.SecurityException: com.example.mper 无权访问 content://media/external/video/media/1275

【问题讨论】:

  • selectList 是什么?要删除的项目列表还是整个列表?
  • 它是选定项目的列表,而不是整个列表。公共静态列表 TotalList = new ArrayList(); List selectList = new ArrayList();
  • 检查您的权限。
  • 您能否详细说明我需要检查什么样的权限。在我的清单中,我有 READ_EXTERNAL_STORAGE WRITE_SETTINGS android:requestLegacyExternalStorage="true" 。
  • 要删除,您必须拥有 WRITE_EXTERNAL_STORAGE 权限。

标签: android delete-file selecteditem


【解决方案1】:

根据您的说法,您想删除多个项目,但您使用字符串来存储要删除的项目的 ID。一个字符串一次只能存储一个 ID:String delete_id = v.getId();。您必须声明一个可以存储多个项目的变量类型,例如 Array 以存储您希望删除的项目的所有 ID。

【讨论】:

  • 这就是我要问的。如何访问 id 并将它们存储在列表中?
  • 只需搜索“单击列表视图中的项目时如何将列表视图中的项目添加到数组中”。我相信有足够的例子。
【解决方案2】:

您的代码的修改版本。

您必须遍历列表才能将其删除。

AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setCancelable(true)
    .setMessage("Are you sure?")
    .setPositiveButton("yes", new DialogInterface.OnClickListener() {
     @Override
         public void onClick(DialogInterface dialog, int which) {
            for (ItemFiles v : selectList) {
              if (v != null) {
                  String delete_id = v.getId();
                  Log.e("TAG","the ids of deleteid is " + delete_id);
                  long long_id = Long.parseLong(delete_id);
                  Uri uri = ContentUris.withAppendedId(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, v);                                     
                  activity.getContentResolver().delete(uri, null, null);
                  itemFiles.remove(position);
                  notifyItemRemoved(position);
                }}
           dialog.dismiss;
  }})
  .setNegativeButton("no", null);

AlertDialog alertDialog = builder.create();
  alertDialog.show();
  alertDialog.getButton(alertDialog.BUTTON_NEGATIVE)
  .setTextColor(ContextCompat.getColor(activity, R.color.black));
  alertDialog.getButton(alertDialog.BUTTON_POSITIVE)
  .setTextColor(ContextCompat.getColor(activity, R.color.black));

【讨论】:

  • 感谢您的回答,但我已经检查过 onClick 内部的 selectList 是否为空,而外部它包含正确的元素,这就是它不删除和删除项目的原因。
  • 我进行了一些更改,可以一键删除多个项目,但对话框仍然打开,当您第二次单击“是”时。它给了我错误所有细节都在上面。
猜你喜欢
  • 2015-09-21
  • 2019-06-04
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
相关资源
最近更新 更多