0

我有一个小问题。我正在尝试创建一个插件来在本机插件中完成一些繁重的工作,并且还解决了 web sqlite 实现中的限制。(数据库限制为 5MB,但我需要更多)。

首先,这是旨在完成这项工作的 Main 类:

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 就会告诉我错误:

未捕获的类型错误:无法在 file:///android_asset/www/worker.js:79 调用未定义的方法 'doAction'

我真的不知道我做错了什么。

- - -添加在 - - -

这是 index.php 中的代码块

        <script lang="text/javascript">
            document.addEventListener("deviceready", onDeviceReady, false);
            var isRun = false;
            function onDeviceReady() {
                WKapi.version();
            };
        </script>
    </div>
</body>
</html>

我仍然得到 Uncaught TypeError: Cannot call method 'doAction' ... 它发生在这个调用上:window.plugins.workerApi.doAction

如果我将 window.plugins.workerApi 放入警报中,它会给我未知的回报。

4

1 回答 1

0

在您的 Java 类中,您正在寻找“getVersion”,所以这就是需要在此处传递的内容。

"version": function(){
    window.plugins.workApi.doAction(
        "getVersion"
        );
    }
于 2012-05-05T15:50:34.880 回答