【问题标题】:NullPointer Exception in Cordova 3.5 android File PluginCordova 3.5 android 文件插件中的 NullPointer 异常
【发布时间】:2014-08-26 11:06:22
【问题描述】:

我最近将我的 cordova 应用程序从 v2.9 升级到了 v3.5。我通过命令行添加了所需的插件,并对我的应用程序进行了科尔多瓦构建。通过文件插件读取/写入文件时出现 Nullpointer 异常。下面是堆栈跟踪:

07-08 18:58:40.750: W/System.err(6670): java.lang.NullPointerException
07-08 18:58:40.750: W/System.err(6670):     at org.apache.cordova.file.LocalFilesystem.filesystemPathForURL(LocalFilesystem.java:67)
07-08 18:58:40.750: W/System.err(6670):     at org.apache.cordova.file.LocalFilesystem.getFileForLocalURL(LocalFilesystem.java:189)
07-08 18:58:40.750: W/System.err(6670):     at org.apache.cordova.file.FileUtils.getFile(FileUtils.java:749)
07-08 18:58:40.760: W/System.err(6670):     at org.apache.cordova.file.FileUtils.access$5(FileUtils.java:742)
07-08 18:58:40.760: W/System.err(6670):     at org.apache.cordova.file.FileUtils$16.run(FileUtils.java:397)
07-08 18:58:40.760: W/System.err(6670):     at org.apache.cordova.file.FileUtils$23.run(FileUtils.java:525)
07-08 18:58:40.760: W/System.err(6670):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
07-08 18:58:40.760: W/System.err(6670):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
07-08 18:58:40.760: W/System.err(6670):     at java.lang.Thread.run(Thread.java:856)

我需要一些即时帮助!

空指针异常已解决,但在文件访问方面需要帮助

我想知道,从应用程序的私有包访问文件的 url 模式应该是什么。在 cordova 2.9 中,我从 Javascript 以 /data/data/com.myapp.android/abc.txt 的身份访问它。我可以知道现在cordova 3.5中url的格式是什么吗?

【问题讨论】:

  • 您也应该发布一些代码,以便其他人可以找出问题。
  • 我猜这个错误在文件插件中。我应该发布哪个代码?
  • 您在哪里存储文件?在 SD 卡或内部存储或其他地方?
  • 在应用程序的私有包中,类似于/data/data/com.myapp.android

标签: java javascript cordova cordova-3


【解决方案1】:

您需要添加 android 文件位置。将此添加到您的 config.xml

preference name="AndroidPersistentFileLocation" value="Internal"

这将解决问题

【讨论】:

    【解决方案2】:

    我设法通过将我的应用程序文件存储在/mnt/sdcard/Android/data/com.myapp.android/ 文件夹中来解决它。这个位置对我的应用来说是私有的,并且会在应用卸载时被清除。

    现在,我可以使用 Cordova 的文件插件从 javascript 读取/写入文件,文件路径将类似于:Android/data/com.myapp.android/abc.txt。由于 File 插件将 Compatibility 视为 config.xml 中首选项 AndroidPersistentFileLocation 的默认值,因此持久文件存储将返回为 /mnt/sdcard(如果已安装),这是 Android 中的默认值。

    参考:Google groups link

    【讨论】:

    • 很好,你得到了答案。现在你可以把你的赏金奖励给你自己了;)
    • 哈哈..但不幸的是,SO不允许这样做
    【解决方案3】:

    试试这个

    window.resolveLocalFileSystemURI(URI, function(f){
        var filePath = f.fullPath;
    }
    

    URI 将是 /data/data/com.myapp.android/abc.txt 或只是 abc.txt

    【讨论】:

    • 这会给我一个FileEntry 对象。如果文件不存在,如何使用文件条目对象写入文件?
    【解决方案4】:

    您需要将以下内容之一添加到您的 config.xml 文件中

    <preference name="AndroidPersistentFileLocation" value="Internal" />

    <preference name="AndroidPersistentFileLocation" value="Compatibility" />

    Check More details on this page 它说

    如果您的应用程序之前已交付给用户,请使用 此插件的旧(1.0 之前)版本,并已将文件存储在 持久文件系统,那么您应该将首选项设置为 “兼容性”。将位置切换到“内部”意味着 升级其应用程序的现有用户可能无法访问 他们以前存储的文件,具体取决于他们的设备。

    EDTT

    你可以这样试试,

    cdvfile:///data/data/com.myapp.android

    Check out

    【讨论】:

    • 我会试试这个,让你知道。谢谢。
    • 我在 config.xml 中将设置设为 Internal,但这不起作用。
    • @Rajesh 您是否重新构建了您的应用程序?你得到相同的 NPE 了吗?
    • 我正在使用 eclipse,它负责构建过程。
    • @Rajesh 你应该做 Clean & Build your self 然后再试一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多