【发布时间】:2014-07-24 11:41:49
【问题描述】:
我正在为 Cordova 3.3 开发一个插件。
在我的 javascript 部分,我正在下载一个存储为 uInt8Array 的 pdf 文件。
download: function ( ) {
var xhr = new XMLHttpRequest();
xhr.open('GET', 'url/to/pdf', true);
xhr.responseType = 'arraybuffer';
xhr.setRequestHeader('Accept', 'application/pdf');
xhr.onload = function(e) {
var uInt8Array = new Uint8Array(this.response);
window.plugins.filedownloader.saveFile(
uInt8Array,
"Downloads",
function ( response ) {
console.log("success");
},
function ( response ) {
console.log("failure");
}
);
};
xhr.send();
},
我将 uInt8Array 提交给我的 cordova 插件的保存方法。 我的插件的 javascript 部分如下所示:
var exec = require('cordova/exec');
function FileDownloader() {
};
FileDownloader.prototype = {
login: function ( loginUrl, params, username, password, successCallback, failureCallback ) {
exec( successCallback, failureCallback, "FileDownloader", "doLogin", [ loginUrl, params, username, password ] );
},
getHtmlPage: function ( url, successCallback, failureCallback ) {
exec( successCallback, failureCallback, "FileDownloader", "getHtmlPage", [ url ] );
},
downloadAndSaveFile: function ( url, saveFolder, successCallback, failureCallback ) {
exec( successCallback, failureCallback, "FileDownloader", "downloadAndSaveFile", [ url, saveFolder ] );
},
saveFile: function ( data, saveFolder, successCallback, failureCallback ) {
exec( successCallback, failureCallback, "FileDownloader", "saveFile", [ data, saveFolder ] );
}
};
FileDownloader.install = function () {
if (!window.plugins) {
window.plugins = {}
}
window.plugins.filedownloader = new FileDownloader();
return window.plugins.filedownloader;
};
cordova.addConstructor(FileDownloader.install);
java部分的save方法如下:
public PluginResult execute(JSONArray args) {
PluginResult result = new PluginResult(PluginResult.Status.OK, "blub");
log("saveFile");
try{
JSONObject dataValues = args.getJSONObject(0);
} catch (JSONException e) {
e.printStackTrace();
}
return result;
}
我现在的问题是,typedArray 不再是数组了。它是一个 JSONObject。 uInt8Array 的索引现在是字符串,不再排序。此外,至少还有一个新键“byteBuffer”。
有没有办法在将 typedArray 移交给插件的 java 部分时将其视为 JSONArray,或者是否有不同的方法来处理这个问题?
【问题讨论】:
标签: java javascript cordova sencha-touch typed-arrays