Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 清除存储后,已删除的文件仍显示在我的应用程序中_Android_Android Studio_Kotlin_Android Recyclerview - Fatal编程技术网

Android 清除存储后,已删除的文件仍显示在我的应用程序中

Android 清除存储后,已删除的文件仍显示在我的应用程序中,android,android-studio,kotlin,android-recyclerview,Android,Android Studio,Kotlin,Android Recyclerview,我正在提取音频文件并显示在recyclerview中。 我在按下“删除”按钮后提供了“删除”选项,文件将从列表和文件管理器中删除,但当我重新打开应用程序时,音频文件将再次出现在“回收器”视图中的同一位置,但不会播放 但当我重新检查文件管理器时,文件不在那里,然后我清除了缓存和存储,但文件仍然在那里。 因此,我重新安装了应用程序,但该文件仍然存在,但您无法播放它 如果你直接从文件管理器中删除该文件,该文件不会立即出现在应用程序中 val uri = Uri.parse(getSongsList?.

我正在提取音频文件并显示在recyclerview中。 我在按下“删除”按钮后提供了“删除”选项,文件将从列表和文件管理器中删除,但当我重新打开应用程序时,音频文件将再次出现在“回收器”视图中的同一位置,但不会播放

但当我重新检查文件管理器时,文件不在那里,然后我清除了缓存和存储,但文件仍然在那里。 因此,我重新安装了应用程序,但该文件仍然存在,但您无法播放它

如果你直接从文件管理器中删除该文件,该文件不会立即出现在应用程序中

val uri = Uri.parse(getSongsList?.get(item.groupId)?.songData)

          val fdelete = File(uri.path)
          if (fdelete.exists()) {
              Log.e("v", "fscsg")

              if (fdelete.delete()) {
                  Log.e("vdv", "fg")
                  System.out.println("file Deleted :${uri.path}")
              } else {
                  Log.e("vd", "fgcs")

                  System.out.println("file not Deleted :${uri.path}")
              }
          }
          Log.i("ld", getSongsList?.get(0)?.songTitle + " " + item.groupId)

          getSongsList?.removeAt(item.groupId)
          _mainScreenAdapter?.notifyDataSetChanged()

所以,当文件不在存储中时,它仍然出现在应用程序中,这怎么可能呢。

我得到了答案,这非常令人沮丧。 有一个媒体数据库,它保存有关媒体文件的所有信息,因此当我删除该文件时,它会被删除,但在媒体数据库中仍有记录,而内容解析器会从媒体数据库中获取数据,因此它就存在于应用程序中。 因此,如果我们重新启动手机,那么删除的文件将从列表中消失,因此每次我们必须删除该文件时,我们也必须将其从数据库记录中删除


仍然在寻找如何从媒体数据库中删除。我得到的答案非常令人沮丧。
File file = new File(uriOfFile);
boolean deleted = file.delete();

//delete file from Media Database
scanaddedFile(file);

private void scanaddedFile(String path) {
try {
    MediaScannerConnection.scanFile(context, new String[] { path },
            null, new MediaScannerConnection.OnScanCompletedListener() {
                public void onScanCompleted(String path, Uri uri) {
                    Log.i("ExternalStorage", "Scanned " + path + ":");
                    Log.i("ExternalStorage", "-> uri=" + uri);
                    context.getContentResolver()
                            .delete(uri, null, null);
                }
            });
} catch (Exception e) {
    e.printStackTrace();
}

}
有一个媒体数据库,它保存有关媒体文件的所有信息,因此当我删除该文件时,它会被删除,但在媒体数据库中仍有记录,而内容解析器会从媒体数据库中获取数据,因此它就存在于应用程序中。 因此,如果我们重新启动手机,那么删除的文件将从列表中消失,因此每次我们必须删除该文件时,我们也必须将其从数据库记录中删除

仍在寻找如何从媒体数据库中删除

File file = new File(uriOfFile);
boolean deleted = file.delete();

//delete file from Media Database
scanaddedFile(file);

private void scanaddedFile(String path) {
try {
    MediaScannerConnection.scanFile(context, new String[] { path },
            null, new MediaScannerConnection.OnScanCompletedListener() {
                public void onScanCompleted(String path, Uri uri) {
                    Log.i("ExternalStorage", "Scanned " + path + ":");
                    Log.i("ExternalStorage", "-> uri=" + uri);
                    context.getContentResolver()
                            .delete(uri, null, null);
                }
            });
} catch (Exception e) {
    e.printStackTrace();
}

}