2012-05-05 1 views
0

У меня есть небольшая проблема. Я пытаюсь создать плагин, чтобы сделать тяжелую работу в родном плагине, а также обмениваться ограничениями в реализации веб-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 в предупреждение, это даст мне неизвестную информацию.

ответ

0

В вашем классе Java вы ищете «getVersion», так что вот что нужно передать здесь.

"version": function(){ 
    window.plugins.workApi.doAction(
     "getVersion" 
     ); 
    } 
+0

Я добавил, как он называется на главный пост –