Вызов функции JavaScript из Java - PullRequest
2 голосов
/ 11 января 2012

Я разрабатываю приложение, используя PhoneGap.Я получил службу, которая работает в фоновом режиме и изначально закодирована (служба и приложение для определения разрыва телефона находятся в одном проекте).К сожалению, я хочу вызвать функцию javascript из этого сервиса.Поэтому я искал в Интернете и нашел кое-что интересное: создаю класс, расширяющий плагин, и поработаю с ним.Затем я нашел это:

this.ctx.sendJavascript("myJavascriptFunction");

Я тестировал с этим кодом, но что-то случилось не так:

java.lang.NullPointerException

Вот как я тестировал:

class c = new class();
c.execute("myFunction",null,null);

Вкласс c, метод execute выглядит следующим образом:

public PluginResult execute(String action, JSONArray args, String callbackId) {
if (action.equals("myFunction")){
    Log.d(TAG,"start actions to do");
    this.ctx.sendJavascript("nameOfFunctionToLaunch");
    Log.d(TAG,"end actions to do");
    return new PluginResult(PluginResult.Status.OK);
}
}

При запуске приложения у меня появляется первый

Log.d(TAG,"start actions to do");

Как мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 12 января 2012

Наконец-то я нашел решение: на самом деле NullPointerException было на ctx . Чтобы исправить это, я установил значение Context моего объекта c следующим образом:

c.setContext(use_An_Object_Of_Type_PhonegapActivity);

Чтобы получить объект, я извлекаю его из AppActivity следующим способом:

public class CloudPhoneAppActivity extends DroidGap {
private class NoScaleWebViewClient extends GapViewClient {

    public NoScaleWebViewClient(DroidGap ctx) {
        super(ctx);
        myApp.ctx = ctx;
    }

    public void onScaleChanged(WebView view, float oldScale, float newScale) {
        Log.d("NoScaleWebViewClient", "Scale changed: " + String.valueOf(oldScale) + " => " + String.valueOf(newScale));
    }
}
/** other stuff after**/ 
}

Итак, вот, наконец, решение:

class c = new class();
c.setContext(myApp.ctx);
c.execute("myFunction",null,null);

Нет изменений в методе execute , который описан ранее. Но будьте осторожны с тем, как вы вызываете функцию javascript.

Эрвана

0 голосов
/ 12 января 2012

Вы не можете вызвать object.loadUrl ("javascript: function ();"); из плагина как плагин не расширяет WebView Android. Чтобы вызвать loadUrl, вам придется передать обратный вызов классу Home, который расширяет DroidGap.

В плагине вы можете определить

Home home = null;
Looper.prepare();
home = new Home();
home.somefunc();

и в вызове somefunc

super.loadUrl("javascript:function();");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...