У меня есть небольшая проблема. Я пытаюсь создать плагин, чтобы сделать тяжелую работу в родном плагине, а также обмениваться ограничениями в реализации веб-sqlite . (База данных ограничена 5 МБ, но мне нужно еще немного).Создание плагина Phonegab приводит к вызову metid 'doAction' undefined
Прежде всего вот Основной класс, который предназначен для выполнения работы:
package com.worker.api;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.phonegap.api.Plugin;
import com.phonegap.api.PluginResult;
import com.phonegap.api.PluginResult.Status;
public class worker extends Plugin{
public final String version = "1.0";
public String callback;
public worker(){
}
public PluginResult execute(String action, JSONArray args, String
callbackId) {
this.callback = callbackId;
PluginResult r = null;
try{
if(action.equals("connectDB")){
}else if(action.equals("closeDB")){
}else if(action.equals("query")){
r = this.query();
}else if(action.equals("insert")){
r = this.insert();
}else if(action.equals("update")){
r = this.update();
}else if(action.equals("delete")){
r = this.delete();
}else if(action.equals("syncronize")){
r = this.syncronize();
}else if(action.equals("getVersion")){
r = this.getVersion();
}else{
r = new PluginResult(Status.INVALID_ACTION);
r.setKeepCallback(true);
}
}catch(JSONException ex){
r = new PluginResult(Status.JSON_EXCEPTION);
}
return r;
}
public PluginResult query(){
return null;
}
public PluginResult insert(){
return null;
}
public PluginResult update(){
return null;
}
public PluginResult delete(){
return null;
}
public PluginResult syncronize(){
return null;
}
public PluginResult getVersion() throws JSONException{
JSONObject obj = new JSONObject();
obj.put(version,this.version);
return new PluginResult(Status.OK,obj);
}
}
На данный момент я только реализованного часть GetVersion, как я до сих пор делает тестирование на этом
В plugin.xml Я добавил это:
<plugin name="workerAPI" value="com.worker.api.worker" />
основной файл JS выглядит следующим образом:
var workerApi = function(){}
var genericSuccess = function(e) {
alert("Success: " + e.toString());
};
var fail = function(e) {
alert("Failure " + e.toString());
};
workerApi.prototype.doAction = function(
operation,
argument,
successFunction,
failFunction
){
var succ = successFunction ? successFunction : genericSuccess;
var faic = failFunction ? failFunction : fail;
return PhoneGap.exec(
succ,
faic,
"workerAPI",
operation,
[argument]
);
};
PhoneGap.addConstructor(function() {
PhoneGap.addPlugin(
"workApi",
new workerApi()
);
});
var WKapi = {
"openDB": function(){
window.plugins.workApi.doAction(
"connectDB",
null
);
},
"closeDB": function(){
window.plugins.workApi.doAction(
"closeDB",
null
);
},
"query": function(arg){
window.plugins.workApi.doAction(
"query",
arg
);
},
"insert": function(arg){
window.plugins.workApi.doAction(
"insert",
arg
);
},
"update": function(arg){
window.plugins.workApi.doAction(
"update",
arg
);
},
"delete": function(arg){
window.plugins.workApi.doAction(
"delete",
arg
);
},
"sync": function(arg){
window.plugins.workApi.doAction(
"syncronize",
arg
);
},
"version": function(){
window.plugins.workApi.doAction(
"version"
);
}
};
Как только я исполню его, регистратор LogCat говорит мне, как ошибка:
Uncaught TypeError: Невозможно вызвать methid 'DoAction' неопределенных на файла: ///android_asset/www/worker.js: 79
Я действительно не знаю, что я делаю неправильно.
----- ADDON ------
Вот кодоблок, что является частью index.php
<script lang="text/javascript">
document.addEventListener("deviceready", onDeviceReady, false);
var isRun = false;
function onDeviceReady() {
WKapi.version();
};
</script>
</div>
</body>
</html>
Я все еще получаю неперехваченным TypeError: Невозможно вызвать метод 'DoAction' ... Это происходит по этому звонку: window.plugins.workerApi.doAction
Если я поставлю window.plugins.workerApi в предупреждение, это даст мне неизвестную информацию.
Я добавил, как он называется на главный пост –