2013-10-11 3 views
2

Эй, ребята, я пытаюсь получить очень простой пользовательский Cordova плагин для работы, и это не работает, и это довольно обидное ...Trivial Кордова плагин не называет родную функцию

я пытался Lookin в PhoneGap учебники для simple plugin и как implement on android, и похоже, что у меня одно и то же, но оно не работает! Все, что предполагается сделать, это вызвать функцию native со строкой, а eclipse выводит эту строку в журнал консоли ..., но нативная функция никогда не называется!

JAVA:

public class ListPlugin extends CordovaPlugin { 

    @Override 
    public boolean execute(String action, JSONArray args, 
         CallbackContext callbackContext) throws JSONException { 

     Log.d("CORDOVA", "!!!"); 
     if(action.equals("showString")){ 
      String message = args.getString(0); 
      Log.d("CORDOVA", message + "!!!"); 
     } 
     return true 
    } 

} 

RES/XML:

<feature name="ListPlugin"> 
    <param name="android-package" value="com.flukenetworks.networkmap.ListPlugin"/> 
</feature> 

JAVASCRIPT:

<script type="text/javascript" src="cordova.js"></script> 
<script type="text/javascript"> 

alert("HERRO?"); 
    cordova.exec(null, null, "ListPlugin", "showString", ["I hate you"]); 
</script> 

Может ли кто-нибудь заметить что-то не так? Это, наверное, что-то действительно тривиальное, что я не вижу ... Я получаю ошибку CordovaWebView Timeout, возможно, что-то с этим связано? Вот код с CordovaWebView, для дерьма и хихиканья.

public class DevicesListFragment extends Fragment{ 

    CordovaWebView webView; 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     webView = new CordovaWebView(getActivity()); 
     webView.loadUrl("file:///android_asset/www/index.html"); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
     return webView; 
    } 
} 

Любая помощь была бы принята с благодарностью!

ответ

3

Я считаю, что понял! Причина, по которой нативный код не вызывается, заключается в том, что кордова не «готова», когда я пытаюсь позвонить cordova.exec().

Я решил эту проблему, добавив EventListener:

document.addEventListener("deviceready", onDeviceReady, false); 

// device APIs are available 
// 
function onDeviceReady() { 
    cordova.exec(null, null, "ListPlugin", "showString", ["I hate you"]); 
} 

В самом деле, Кордова/PhoneGap документы как рекомендую всегда использовать это - теперь я знаю!

+1

В моем случае вызов cordova.exec не вызывал мой код, поскольку я не использовал массив для аргументов функции. Я пишу это на случай, если кто-то еще попадет сюда из поисковой системы. :) – wojciii

Смежные вопросы