Cordova 3.4中的requestFileSystem失败并显示“Class not found”错误

时间:2014-04-02 15:05:04

标签: android apache cordova

希望有人能解决这个问题,一直在与这个问题作斗争。 我试图浏览文件系统上的文件夹来选择文件,但我似乎无法连接到文件系统。

当我调用" window.requestFileSystem"时,错误回调将返回"未找到的类"错误。进入Cordova" requestFileSystem"功能,我注意到#34; Class not found"在exec()调用期间返回(我无法跟踪它)。 有没有人通过这个问题,或知道如何解决它? 我知道它已在多个论坛上列出,但修正案表明那些不适合我。

据我所见,所有的插件都在那里。使用Cordova CLI安装,它们出现在插件文件夹中。我想知道文件插件是否实际加载,不知道我如何验证..

  • org.apache.cordova.console
  • org.apache。
  • cordova.device org.apache.cordova.file
  • org.apache.cordova.file转移

WWW / index.html中

<body onload="onLoad();">
    <script type="text/javascript">
        // Init when we're good and ready.
        function onLoad(){document.addEventListener('deviceready', init, true);}

        // Init :)
        function init(){
            // window.requestFileSystem is recognized, so far so good.
            window.requestFileSystem(1, 0, function(fileSystem){
                alert('success');
            }, function(e){
                // 'e' is an object, {code: 'Class not found'}
                alert('Error accessing local file system');
            });
        }
    </script>
    <div class="app">
        <h1>Apache Cordova</h1>
        ...
    </div>

    <script type="text/javascript" src="cordova.js"></script>
</body>

config.xml中

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.fwd.cwptakeonsheetsv1" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>CWPTakeOnSheetsV1</name>
    <description>
        A sample Apache Cordova application that responds to the deviceready event.
    </description>
    <author email="dev@cordova.apache.org" href="http://cordova.io">
        Apache Cordova Team
    </author>
    <content src="index.html" />
    <access origin="*" />



    <feature name="App">
        <param name="android-package" value="org.apache.cordova.App" />
    </feature>
    <feature name="Device">
        <param name="android-package" value="org.apache.cordova.device.Device" />
    </feature>
    <feature name="File">
        <param name="android-package" value="org.apache.cordova.file" />
        <param name="android-package" value="org.apache.cordova.file.FileUtils" />
        <param name="onload" value="true" />
        <param name="android-package" value="org.apache.cordova.FileUtils" />
    </feature>
    <feature name="FileTransfer">
        <param name="android-package" value="org.apache.cordova.filetransfer.FileTransfer" />
    </feature>
</widget>

Cordova的requestFileSystem.js

/**
 * Request a file system in which to store application data.
 * @param type  local file system type
 * @param size  indicates how much storage space, in bytes, the application expects to need
 * @param successCallback  invoked with a FileSystem object
 * @param errorCallback  invoked if error occurs retrieving file system
 */
var requestFileSystem = function(type, size, successCallback, errorCallback) {
    argscheck.checkArgs('nnFF', 'requestFileSystem', arguments);
    var fail = function(code) {
        errorCallback && errorCallback(new FileError(code));
    };

    if (type < 0) {
        fail(FileError.SYNTAX_ERR);
    } else {
        // if successful, return a FileSystem object
        var success = function(file_system) {
            if (file_system) {
                if (successCallback) {
                    // grab the name and root from the file system object
                    var result = new FileSystem(file_system.name, file_system.root);
                    successCallback(result);
                }
            }
            else {
                // no FileSystem object returned
                fail(FileError.NOT_FOUND_ERR);
            }
        };
        // The error happens in exec()
        exec(success, fail, "File", "requestFileSystem", [type, size]);
    }
};

3 个答案:

答案 0 :(得分:2)

我想我发现了问题(至少在我的情况下)。我一遍又一遍地挣扎着这个突然出现:

只需打开plugins / android.json并将'config.xml'标题下的任何条目移动到'res / xml / config.xml'标题。

我认为这是某些插件(在我的情况下,Immersify)没有切换到新的config.xml位置的问题。修复此问题后,所有'缺失'插件神奇地出现在我的platforms / android / res / xml / config.xml文件中,并且'找不到类'错误消失了。

答案 1 :(得分:1)

你检查过插件文件夹中生成的android.json吗? 我有一个类似的问题,因为一些'尚未更新到3.4'插件,如sqlite在此文件中生成错误的方向(在构建时使用)。这导致从我的实际config.xml中删除一些其他插件

答案 2 :(得分:0)

我最终解决了我的问题。以下是我为使其发挥作用所采取的措施:

  1. 将所有JavaScript移至 index.html 的主要部分(包括对 .js 文件的引用)。

  2. config.xml 中取出所有功能标签。我的 /platforms/android/AndroidManifest.xml 仍然包含:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
  3. 从我的代码中取出所有alerts()和自定义调试功能。我不知道延迟是否会导致问题或是什么,但似乎有影响。

  4. 我还注意到,如果window.requestFileSystemundefined,则可能是由于JavaScript错误导致无法加载。

    有一个很好的例子here - 感谢Ram发布这个。

    感谢@QuickFix的回复!