Привязка кода JavaScript к коду Android с параметрами объектов - PullRequest
8 голосов
/ 17 июня 2019

Как видно из названия, я пытаюсь привязать код javascript к своему приложению для Android, чтобы в своем приложении я мог реагировать на событие / сообщение, отправляемое моим веб-сайтом.

После прочтения официальной документации для Android , связанной с привязкой javascript, мне удалось легко реализовать ее ... до тех пор, пока она является строкой.

Что работает нормально? Я реализовал следующий код в моем приложении:

/** Instantiate the interface and set the context  */
class ClientInterface(private val mContext: Context) {

    /** Show a toast from the web page  */
    @JavascriptInterface
    fun postMessage(message: String) {
        Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show()
    }
}

если параметром функции postMessage является строка, и я передаю строку из моего JavaScript в качестве параметра, все в порядке. это передает строку. Моя проблема в том, что я пытаюсь получить JSONObject вместо String, и он не работает. Я пытался разыграть все, что, как я думал, могло бы работать .. JSONObject / JSONObject? / Любой / Любой? / Объект Object? и так далее ..

когда я отправляю объект в моем javascript, кажется, ничего не работает. все, что я получаю в своем приложении - это пустой ответ.

кто-нибудь пробовал что-то подобное? что мне не хватает?

P.S. вот мой код JavaScript для справки:

var objectMessage = {
        type: "quote",
        code: "My name is Inigo Montoya. You killed my father, prepare to die!"
    }

window.CLIENT.postMessage(objectMessage);

Ответы [ 2 ]

2 голосов
/ 17 июня 2019

Нельзя передать объект только примитивно!Таким образом, вам нужно привести в порядок ваш объект.

var objectMessage = {
  type: "quote",
  code: "My name is Inigo Montoya. You killed my father, prepare to die!"
}

window.CLIENT.postMessage(JSON.stringify(objectMessage));
1 голос
/ 17 июня 2019

В моем старом проекте Android мне удалось передать объект JSON через JavaScriptInterface

Это должно делать вашу работу:

var javaScriptObject = {"field1":"string1", "field2":"string2"};
JavaScriptInterface.passObject(javaScriptObject);

Теперь и другие варианты - это анализировать JSON-объект в строку и передавать его, как вы сказали, это работает. Чем вы можете разобрать строку в JSON в своем коде JAVA для Android.

...