【问题标题】:file.exists() returns different value for same file in different activityfile.exists() 在不同的活动中为同一个文件返回不同的值
【发布时间】:2018-06-15 14:19:49
【问题描述】:

我的应用下载 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"
}

这段代码在下载文件的Activity 1中运行良好。但是当我去 Activity 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

当我从 Activity 2 下载文件时,代码再次完美运行。

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

【问题讨论】:

  • 可能是权限问题?
  • 我已经获得了存储的运行时权限,并且文件正在使用该权限打开。所以我可以保证这不是权限问题。
  • 什么时候打开Activity2?
  • Activity 1 和 Activity 2 没有连接.. 每个 Activity 都是从 main acrivity 启动的。
  • 当你从activity1下载文件然后打开activity2并且什么都不做只是检查文件资源管理器是否有那个文件?

标签: android kotlin


【解决方案1】:

为了工作安全,请尝试在共享此代码的地方使用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

也许上面的代码对你有帮助

【讨论】:

  • 感谢您的建议。但是 getDir 函数在 Util 类中。所以它不会重复。
  • 非常感谢@Zoe 的关注,但interface 只是一个术语;-)
【解决方案2】:

解决方案

过了一会儿,我发现了问题。还是不知道具体原因。

下载 PDF 后,我正在打开另一个活动 活动 1(从哪里下载文件) 阅读 PDF 文件未完成活动 1。然后当我回到活动 2(书签活动)时,file.exist() 返回 false

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-20
    相关资源
    最近更新 更多