Java 使用PhoneGap创建文件时出现编码错误

Java 使用PhoneGap创建文件时出现编码错误,java,javascript,android,cordova,file-io,Java,Javascript,Android,Cordova,File Io,我知道有很多类似的问题,但我真的无法解决这个问题。 我使用AppPresser作为Wordpress插件/主题来“应用”现有的WP博客。这使用PhoneGap将博客与设备连接起来。我的Cordova安装版本是3.6.3-0.2.13。 在设备上创建简单文件时遇到问题。我正在使用Cordova文件API来完成这件事。我使用的文件API版本是1.1.1-dev(AppPresser提供的PhoneGap构建包含已经设置好的基本插件)。 我的Javascript文件如下所示: window.reque

我知道有很多类似的问题,但我真的无法解决这个问题。 我使用AppPresser作为Wordpress插件/主题来“应用”现有的WP博客。这使用PhoneGap将博客与设备连接起来。我的Cordova安装版本是3.6.3-0.2.13。 在设备上创建简单文件时遇到问题。我正在使用Cordova文件API来完成这件事。我使用的文件API版本是1.1.1-dev(AppPresser提供的PhoneGap构建包含已经设置好的基本插件)。 我的Javascript文件如下所示:

window.requestFileSystem(window.LocalFileSystem.PERSISTENT, 0, gotFS, fail1);

function gotFS(fileSystem) {
    fileSystem.root.getFile( "dummy.html", {create: true, exclusive: false}, gotFileEntry, fail2);
}

function gotFileEntry(fileEntry) {
    alert("Got file Entry!!");
}

function fail1(e) {
    console.log("fail1: "+e);
}    
function fail2(e) {
    console.log(e);
    var msg = '';
    switch ( e.code ) {
        case FileError.ENCODING_ERR:
            msg = 'ENCODING_ERR';
            break;
        case FileError.INVALID_MODIFICATION_ERR:
            msg = 'INVALID_MODIFICATION_ERR';
            break;
        case FileError.INVALID_STATE_ERR:
            msg = 'INVALID_STATE_ERR';
            break;
        case FileError.NO_MODIFICATION_ALLOWED_ERR:
            msg = 'NO_MODIFICATION_ALLOWED_ERR';
            break;
        case FileError.NOT_FOUND_ERR:
            msg = 'NOT_FOUND_ERR';
            break;
        case FileError.NOT_READABLE_ERR:
            msg = 'NOT_READABLE_ERR';
            break;
        case FileError.PATH_EXISTS_ERR:
            msg = 'PATH_EXISTS_ERR';
            break;
        case FileError.QUOTA_EXCEEDED_ERR:
            msg = 'QUOTA_EXCEEDED_ERR';
            break;
        case FileError.SECURITY_ERR:
            msg = 'SECURITY_ERR';
            break;
        case FileError.TYPE_MISMATCH_ERR:
            msg = 'TYPE_MISMATCH_ERR';
            break;
        default:
            msg = 'Unknown Error';
            break;
    };
    alert( 'Error: ' + msg );
}
函数fileSystem.root.getFile失败(调用fail2),错误为FileError.ENCODING\u ERR。请注意,我不会等待应用程序触发onDeviceReady事件,因为window.requestFileSystem是在用户在页面中执行了大量操作之后调用的。我主要在我的LG Nexus 4上进行测试,但错误也发生在我的iOS模拟器上。 我做了很多调试。cordova.js中的核心错误是调用本机服务时:

 var messages = nativeApiProvider.get().exec(service, action, callbackId, argsJson);
var消息为空。因此,我对本机Android应用程序进行了一些调试,本机例外是:

java.net.MalformedURLException: No installed handlers for this URL
受影响的方法位于FileUtils.java类中:

private JSONObject getFile(String baseURLstr, String path, JSONObject options, boolean directory) throws FileExistsException, IOException, TypeMismatchException, EncodingException, JSONException {
    try {
        LocalFilesystemURL inputURL = new LocalFilesystemURL(baseURLstr);
        Filesystem fs = this.filesystemForURL(inputURL);
        if (fs == null) {
            throw new MalformedURLException("No installed handlers for this URL");
        }
        return fs.getFileForLocalURL(inputURL, path, options, directory);

    } catch (IllegalArgumentException e) {
        throw new MalformedURLException("Unrecognized filesystem URL");
    }

}
在这个方法中,this.filesystemForURL(inputURL)返回null。 方法参数是:baseURLstr=“/”,path=“dummy.html”,options='{“create”:true,“exclusive”:false}',boolean directory=false。 LocalFilesystemURL inputURL get等于cdvfile://localhost/nullnull . 这意味着LocalFileSystemURL对象中的fileSystemName和fullPath变量均为null。因此,this.filesystemForURL(inputURL)get等于Null并引发异常。问题在于类构造函数:

public LocalFilesystemURL(Uri URL) {
    this.URL = URL;
    this.filesystemName = this.filesystemNameForLocalURL(URL);
    this.fullPath = this.fullPathForLocalURL(URL);
}
URL为“/”,并且this.filesystemNameForLocalURL(URL)和this.fullPathForLocalURL(URL)都返回null。 例如,fileSystemNameForLocalURL方法:

private String filesystemNameForLocalURL(Uri URL) {
    if (FILESYSTEM_PROTOCOL.equals(URL.getScheme()) && "localhost".equals(URL.getHost())) {
        List<String> pathComponents = URL.getPathSegments();
        if (pathComponents != null && pathComponents.size() > 0) {
            return pathComponents.get(0);
        }
        return null;
    } else if ("content".equals(URL.getScheme())) {
        return "content";
    }
    return null;
}
private String filesystemNameForLocalURL(uriurl){
if(FILESYSTEM_PROTOCOL.equals(URL.getScheme())&&“localhost.equals(URL.getHost())){
List pathComponents=URL.getPathSegments();
if(pathComponents!=null&&pathComponents.size()>0){
返回pathComponents.get(0);
}
返回null;
}else if(“content.equals(URL.getScheme())){
返回“内容”;
}
返回null;
}
它显然返回null,因为URL为“/”。因此,问题可能在于JavaScript函数传递的baseURLstr。 你能提供一些提示吗


非常感谢,罗伯托你好,你已经解决了吗?有同样的。。。