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

时间:2018-06-15 14:19:49

标签: 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.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下载文件时,代码再次完美运行。

这个问题背后的原因是什么?我在代码中看不到任何问题。任何帮助,将不胜感激。感谢。

2 个答案:

答案 0 :(得分:2)

为了安全起见,请尝试使用共享此代码的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

上述代码可能对您有所帮助

答案 1 :(得分:1)

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

下载PDF后,我正在打开另一项活动 活动1(从文件下载的地方)阅读PDF文件而不完成活动1 。然后当我回到活动2(书签活动)时,file.exist()返回 false

但是,如果我在下载文件后完成活动1 并返回活动2 file.exist()返回 true 。< / p>