Android file.exists()为不同活动中的同一文件返回不同的值

Android file.exists()为不同活动中的同一文件返回不同的值,android,kotlin,Android,Kotlin,我的应用程序下载PDF文件。因此,在某些活动中,我需要检查哪些文件可用于执行某些操作。我正在使用下面的代码检查文件是否可用- val file = File(getDir(book)) if (file.exists()) { // do some stuff } else { // do other stuff } 下面是getDir函数的代码- fun getDir(book: Book): String { return Environment.getExternalS

我的应用程序下载PDF文件。因此,在某些活动中,我需要检查哪些文件可用于执行某些操作。我正在使用下面的代码检查文件是否可用-

val file = File(getDir(book))

if (file.exists()) {
   // do some stuff
} else {
   // do other stuff
}
下面是getDir函数的代码-

fun getDir(book: Book): String {
  return Environment.getExternalStorageDirectory().toString() + File.separator +
      "PDF FOLDER/${book.layer_name}/${book.class_name}/${book.name}.pdf"
}
这段代码在下载文件的活动1中运行良好。但是,当我转到活动2时,该方法表示该文件不存在

我从这两个活动中记录了getDir(book),它们是100%相同的。日志如下:

E/loggg: /storage/emulated/0/PDF FOLDER/Primary/Class1/my_book.pdf
E/loggg: /storage/emulated/0/PDF FOLDER/Primary/Class1/my_book.pdf
当我从活动2下载文件时,代码又能正常工作了


这个问题背后的原因可能是什么?我看不出我的代码有任何问题。任何帮助都将不胜感激。谢谢。

为了确保工作安全,请尝试在共享此代码的地方使用
界面
,这样可以避免重复代码,并减少类似情况(相同的代码块不起作用)

试一试


也许上述代码对您有帮助

为了工作安全,请尝试在共享此代码的地方使用
界面
,这样可以避免重复代码,从而减少类似情况(相同代码块不起作用)

试一试

也许上述代码对您有帮助

解决方案 过了一会儿,我发现了问题。仍然不知道确切的原因

下载完PDF后,我开始了另一项活动 活动1(从下载文件的位置)在不完成活动1的情况下阅读PDF文件。然后当我回到活动2(书签活动)文件时,exist()返回了false

但是,如果我下载文件后完成活动1并返回活动2,则文件exist()将返回true

解决方案 过了一会儿,我发现了问题。仍然不知道确切的原因

下载完PDF后,我开始了另一项活动 活动1(从下载文件的位置)在不完成活动1的情况下阅读PDF文件。然后当我回到活动2(书签活动)文件时,exist()返回了false


但是,如果我下载文件后完成活动1并返回到活动2文件,则exist()是否返回true

可能是权限问题?我已获得存储的运行时权限,文件将以该权限打开。因此,我可以保证这不是权限问题。当您打开活动2时?活动1和活动2未连接。。每个活动都是从主活动启动的。当您从活动1下载文件,然后打开活动2,什么也不做,只需检查文件资源管理器是否存在该文件?可能是权限问题?我已获得存储的运行时权限,并且文件是以该权限打开的。因此,我可以保证这不是权限问题。当您打开活动2时?活动1和活动2未连接。。每个活动都是从主活动启动的。当您从活动1下载文件,然后打开活动2,什么也不做时,只需检查文件资源管理器中是否有该文件?谢谢您的建议。但是getDir函数在Util类中。所以它不再重复了。非常感谢@Zoe的提示,但是
interface
只是一个术语;-)谢谢你的建议。但是getDir函数在Util类中。所以它不再重复了。非常感谢@Zoe的提示,但是
interface
只是一个术语;-)
open class ActivityBase: AppCompatActivity {
    protected fun getDir(book: Book): String {
        return Environment.getExternalStorageDirectory().toString() + File.separator + 
        "PDF FOLDER/${book.layer_name}/${book.class_name}/${book.name}.pdf"
    }
}

class Activity1: ActivityBase

class Activity2: ActivityBase