【问题标题】:fileSystem.root.getDirectory and fileSystem.root.getFile threw java.net.MalformedURLException: No installed handlers for this URLfileSystem.root.getDirectory 和 fileSystem.root.getFile 抛出 java.net.MalformedURLException: No installed handlers for this URL
【发布时间】:2014-02-20 10:28:07
【问题描述】:

PhoneGap 3.3 文件插件在 Android 上无法与我一起使用,我尝试了 getFile 和 getDirectory,但一直给我异常

02-20 12:24:34.997: W/System.err(32109): java.net.MalformedURLException: No installed handlers for this URL
02-20 12:24:34.997: W/System.err(32109):    at org.apache.cordova.file.FileUtils.getFile(FileUtils.java:684)
02-20 12:24:35.007: W/System.err(32109):    at org.apache.cordova.file.FileUtils.access$5(FileUtils.java:679)
02-20 12:24:35.007: W/System.err(32109):    at org.apache.cordova.file.FileUtils$16.run(FileUtils.java:349)
02-20 12:24:35.017: W/System.err(32109):    at org.apache.cordova.file.FileUtils$24.run(FileUtils.java:473)
02-20 12:24:35.017: W/System.err(32109):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
02-20 12:24:35.017: W/System.err(32109):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
02-20 12:24:35.017: W/System.err(32109):    at java.lang.Thread.run(Thread.java:841)

JavaScript 代码

downloadAgendaPage = function () {
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);
}

function gotFS(fileSystem) {
    console.log("Emaish: FileSystem Requested");
    console.log("Emaish: fileStream.name = " + fileSystem.name);
    console.log("Emaish: fileStream.root.name = " + fileSystem.root.name);
    fileSystem.root.getFile("text.txt", {create: true, exclusive: false}, gotFileEntry, fail);
}

function gotFileEntry(fileEntry) {
    console.log("Emaish: File Gotten");
    var uri = encodeURI("http://****/data/MYOEB2013_Agenda.ics");
    console.log("Emaish: uri:" + uri);
    var sPath = fileEntry.fullPath.replace("text.txt", "Agenda.ics");
    console.log("Emaish: sPath:" + sPath);
    fileEntry.remove();
    var fileTransfer = new FileTransfer();
    fileTransfer.download(
        uri,
        sPath,
        function (theFile) {
            console.log("download complete: " + theFile.toURI());
            //showLink(theFile.toURI());
            alertify.alert("Agenda downloaded to " + theFile.toURI());
        },
        function (error) {
            console.log("download error source " + error.source);
            console.log("download error target " + error.target);
            console.log("upload error code: " + error.code);
        }
    );
}

Console.log 结果

02-20 16:15:37.205: I/chromium(23491): [INFO:CONSOLE(59)] "Emaish: FileSystem Requested", source: file:///android_asset/www/js/agenda.js (59)
02-20 16:15:37.205: I/chromium(23491): [INFO:CONSOLE(60)] "Emaish: fileStream.name = persistent", source: file:///android_asset/www/js/agenda.js (60)
02-20 16:15:37.205: I/chromium(23491): [INFO:CONSOLE(61)] "Emaish: fileStream.root.name = ", source: file:///android_asset/www/js/agenda.js (61)

【问题讨论】:

  • 您能提供更多信息吗?你作为parmater传递了什么?
  • 我更新了问题以显示 javascript 代码
  • 日志结果 02-20 16:15:37.205: I/chromium(23491): [INFO:CONSOLE(59)] "Emaish: FileSystem Requested", source: file:///android_asset/ www/js/agenda.js (59) 02-20 16:15:37.205: I/chromium(23491): [INFO:CONSOLE(60)] "Emaish: fileStream.name = persistent", 来源: file:// /android_asset/www/js/agenda.js (60) 02-20 16:15:37.205: I/chromium(23491): [INFO:CONSOLE(61)] "Emaish: fileStream.root.name = ",来源: file:///android_asset/www/js/agenda.js (61)
  • 嗯,奇怪 - 看起来很理智。我建议打开 org.apache.cordova.file.FileUtils 并调试它说它崩溃的行。至少这样你就可以知道它正在尝试解决哪条路径,以及可能发生错误的原因。
  • 值为:baseURLstr = "/" , path = "text.txt" 执行后 inputURL = new LocalFilesystemURL(baseURLstr);结果: inputURL.filesystemName 为 null 并且 inputURL.fullPath 为 null

标签: android file cordova exception


【解决方案1】:

这个奇怪错误的原因是我手动更新了 cordova-plugins.js 文件并手动添加了插件 js 文件,因为它们不是自动添加的。 为什么它们没有自动添加?因为我做错了..

答案是不要构建然后添加插件,而是添加插件然后构建然后用你的替换 www 文件。

【讨论】:

    【解决方案2】:

    phonegap 3.3.0 中读取目录结构有变化。

    我遇到了类似的问题,我必须通过使用 fullPath 和 window.resolveLocalFileSystemURL() 来读取目录中的所有文件。

    我尝试使用 fileEnteries.fullPath 获取绝对路径,但它显示 '/'(root) 作为早期版本它曾经是 'file:///'。

    *使用 entries[i].toURL() 获取绝对路径而不是 fileEnteries.fullPath *

        for (var i = 0; i < entries.length; i++) {
    
            //Adding into Store for my example          
            data.push({
                fileName : entries[i].name,
                isDirectory : entries[i].isDirectory,
                fullPath : entries[i].toURL() //instead of entries[i].fullPath
            });
        }
    

    及以后在window.resolveLocalFileSystemURL(entries[i].toURL() ,success,failuere);

    中使用

    它对我有用!

    【讨论】:

    • 感谢您的回答,您能告诉我在我的示例中在哪里调用吗?正如您在我的 JS 代码中看到的,我使用 getFile 获取完整路径,将其传递给上传功能,请指导我
    • 因为 getFile 和 getDirectory 给我例外,我不会去下一步使用 resolveLocalFileSystemURL
    • 据我了解,这个问题是由于文件“readme.txt”不可用。为什么不使用 Phonegap API DirectoryReader 检查文件系统并确保文件到位。它将为您提供根目录下可用文件和目录的列表,如果您遇到任何问题,您可以给我发邮件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 2013-10-16
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 2018-11-04
    相关资源
    最近更新 更多