2014-10-23 4 views
0

execuse my english ... Я пытаюсь написать кросс-платформу Webapp изначально только для платформы Android. Я должен писать и читать файлы в Файловой системе мобильного телефона. Я уже видел, что пакет rikulo_gap не поддерживает API файловой системы. API-интерфейс файловой системы, используемый Rikulo, - that one, который, конечно же, не работает на мобильной платформе.Как использовать API файловой системы Cordova/Phonegap с Rikulo?

Итак, я видел, что Js-Package Rikulo должен сделать мой Dart-Code совместимым с моим Cordova.js-файлом (v4.0.0), который включает глобальную функцию requestFileSystem (постоянство, размер, успех-функционирование, сбой -funct). Теперь я пытался сделать мой код работает, но я не получаю файлсистему обратно - я получаю сообщение об ошибке ...

Вот мой Dart-код:

import 'package:rikulo_gap/device.dart'; 
import 'dart:js' as js; 

void main() { 
Device.init().then((device) => onDeviceReady(device)). 
catchError((ex) => print("AN ERROR OCCURED: " + ex.toString())); 
} 

void onDeviceReady(device) { 
var persistent = js.context['PERSISTENT']; 
print("Should be Constant PERSISTENT of LFS: " + persistent.toString()); 
var fsName = js.context.callMethod('requestFileSystem',[persistent,0,dofs,fail]); 
} 

void dofs(fs) { 
print("Success"); 
var myFs = js.context[fs]; 
print("The Return of RequestFileSystem is a: " + myFs.toString()); 
} 

LogCat говорит:

10-23 18:08:32.589: D/CordovaLog(951): file:///android_asset/www/adam.dart.js: Line 12111 : Should be Constant PERSISTENT of LFS: 1 
10-23 18:08:32.624: D/CordovaLog(951): file:///android_asset/www/adam.dart.js: Line 12111 : Success 
10-23 18:08:32.649: D/CordovaLog(951): file:///android_asset/www/cordova.js: Line 1060 : processMessage failed: Stack: Error 
10-23 18:08:32.649: D/CordovaLog(951):  at dart.wrapException (file:///android_asset/www/adam.dart.js:2520:15) 
10-23 18:08:32.649: D/CordovaLog(951):  at JsObject.$index (file:///android_asset/www/adam.dart.js:11549:17) 
10-23 18:08:32.649: D/CordovaLog(951):  at dart.J.$index$asx (file:///android_asset/www/adam.dart.js:19278:41) 
10-23 18:08:32.649: D/CordovaLog(951):  at dofs (file:///android_asset/www/adam.dart.js:4185:7) 
10-23 18:08:32.649: D/CordovaLog(951):  at dart.Primitives_applyFunction (file:///android_asset/www/adam.dart.js:2489:23) 
10-23 18:08:32.649: D/CordovaLog(951):  at _callDartFunction (file:///android_asset/www/adam.dart.js:11464:29) 
10-23 18:08:32.649: D/CordovaLog(951):  at file:///android_asset/www/adam.dart.js:11671:18 
10-23 18:08:32.649: D/CordovaLog(951):  at file:///android_asset/www/plugins/org.apache.cordova.file/www/requestFileSystem.js:52:25 
10-23 18:08:32.649: D/CordovaLog(951):  at success (file:///android_asset/www/plugins/org.apache.cordova.file/www/fileSystems-roots.js:40:13) 
10-23 18:08:32.649: D/CordovaLog(951):  at Object.cordova.callbackFromNative (file:///android_asset/www/cordova.js:293:54) 
10-23 18:08:32.649: D/CordovaLog(951): file:///android_asset/www/cordova.js: Line 1061 : processMessage failed: Message: S01 File1158866550 [{"fullPath":"\/","filesystemName":"temporary","isDirectory":true,"nativeURL":"file:\/\/\/storage\/emulated\/0\/Android\/data\/de.htwg.myAndroid\/cache\/","filesystem":0,"isFile":false,"name":""},{"fullPath":"\/","filesystemName":"persistent","isDirectory":true,"nativeURL":"file:\/\/\/storage\/emulated\/0\/","filesystem":1,"isFile":false,"name":""},{"fullPath":"\/","filesystemName":"content","isDirectory":true,"nativeURL":"cdvfile:\/\/localhost\/content\/","filesystem":1,"isFile":false,"name":""},{"fullPath":"\/","filesystemName":"files","isDirectory":true,"nativeURL":"file:\/\/\/data\/data\/de.htwg.myAndroid\/files\/","filesystem":1,"isFile":false,"name":""},{"fullPath":"\/","filesystemName":"files-external","isDirectory":true,"nativeURL":"file:\/\/\/storage\/emulated\/0\/Android\/data\/de.htwg.myAndroid\/files\/","filesystem":1,"isFile":false,"name":""},{"fullPath":"\/","filesystemName":"documents","isDirectory":true,"nativeURL":"file:\/\/\/data\/data\/de.htwg.myAndroid\/files\/Documents\/","filesystem":1,"isFile":false,"name":""},{"fullPath":"\/","filesystemName":"sdcard","isDirectory":true,"nativeURL":"file:\/\/\/storage\/emulated\/0\/","filesystem":1,"isFile":false,"name":""},{"fullPath":"\/","filesystemName":"cache","isDirectory":true,"nativeURL":"file:\/\/\/data\/data\/de.htwg.myAndroid\/cache\/","filesystem":1,"isFile":false,"name":""},{"fullPath":"\/","filesystemName":"cache-external","isDirectory":true,"nativeURL":"file:\/\/\/storage\/emulated\/0\/Android\/data\/de.htwg.myAndroid\/cache\/","filesystem":1,"isFile":false,"name":""},{"fullPath":"\/","filesystemName":"root","isDirectory":true,"nativeURL":"file:\/\/\/","filesystem":1,"isFile":false,"name":""}]  

что меня раздражает в том, что первое исключение на стеке является dart.wrapException, поэтому я предполагаю, что это вообще Dart <> проблема Js Interop.

Я следовал официальной инструкции cordova для Building with Android и в настоящее время я строю с Windows CommandLine с cordova run android. (И да, я уже установлены плагины (File, FileUtil, устройство через CommandLine и они будут добавлены к проекту)

Так может кто-нибудь сказать мне:.

  1. Является ли это, как я думаю, и есть не обычный способ использовать Cordova-Filesystem API с Rikulo/Dart?
  2. Если 1. правда, есть обходной путь? Кто-нибудь идея, свободная нота Одер что-нибудь другое, что может мне помочь?

ответ

2
  1. R ikulo пока не поддерживает API файловой системы Cordova. Вы можете внести свой вклад или попробовать вместо этого использовать window.requestFileSystem.

  2. Объект, возвращаемый в dofs, является экземпляром JsObject, поэтому вам не нужно использовать js.context для его преобразования. То есть,

    var myFs = js.context[fs]; 
    

    должен быть пересмотрен

    var myFs = fs; 
    
1

OMG ты так прямо в точке 2 ... утраченного два дня моей жизни: O (точка 1 не может потому что с dart: html package функция window.requestFileSystem вызывает webKitRequestFileSystem, которая просто работает в браузере Chrome, и LogCat говорит мне, что s.th. like «Не поддерживает функцию webKitRequestFileSystem)

Меня раздражало, что fs .toString только что возвратил [Object object], поэтому я думал, что это просто пустой объект, и потому что я подписал функцию только с dofs (fs) (без типа), мой IDE/Dart-API не дал мне предложений типа «callMethod() для JsObject ...Теперь я изменил его таким образом:

void main() { 
Device.init().then((device) => onDeviceReady(device)).catchError((ex) => print("AN ERROR OCCURED: " + ex.toString())); 
} 
void onDeviceReady(device) { 
var persistent = context['PERSISTENT']; 
print("Should be Constant PERSISTENT of LFS: " + persistent.toString()); 
context.callMethod('requestFileSystem',[persistent,0,dofs,fail]); 
} 
void dofs(JsObject fs) { 
print("Success"); 
var fsroot = fs['root']; 
createFile(fsroot); 
} 
void createFile(JsObject fsroot) { 
var cNe = new JsObject.jsify({'create': true, 'exclusive': false}); 
fsroot.callMethod('getFile', ["DartCreatedFile.txt",cNe,gotFileEntry,fail]); 
} 
void gotFileEntry(JsObject fileEntry) { 
print(fileEntry['fullPath']); 
} 

И Logcat успешно говорит мне:

10-24 14:17:03.945: D/CordovaLog(6685): file:///android_asset/www/fileSystemApi.js: Line 8 : Device is Ready!!! 
10-24 14:17:04.055: D/CordovaLog(6685): file:///android_asset/www/adam.dart.js: Line 12294 : Should be Constant PERSISTENT of LFS: 1 
10-24 14:17:04.085: D/CordovaLog(6685): file:///android_asset/www/adam.dart.js: Line 12294 : Success 
10-24 14:17:04.105: D/CordovaLog(6685): file:///android_asset/www/adam.dart.js: Line 12294 : //DartCreatedFile.txt 
Смежные вопросы