#javascript #android-studio #kotlin
Вопрос:
У меня есть приложение для Android, написанное на javascript. В Android studio я использую Kotlin. Что мне нужно сделать, так это получить свойства устройства и передать их в мой javascript-код для логики приложений. Я могу вызвать метод из javascript в Kotlin с помощью
@JavascriptInterface
и верните строку из метода, с помощью которого я могу консольно войти в js и увидеть значение.
Но если я создам массив, объект или даже попытаюсь вернуть json, используя библиотеку GSON или JSONObject, журнал консоли JS покажет [объект объекта], и для доступа к свойствам или индексам он просто покажет неопределенную или выдаст ошибку.
Вот несколько примеров, которые я пытался в android studio перейти на javascript.
// ex: 1 val student = Student("Alex", "Rome") // instance val jsonString = Gson().toJson(student) Log.i("Android studio", "${student.name} ${jsonString}") // ex: 2 val jsonStr = "{"age":33,"messages":["msg 1","msg 2"],"name":"jim"}" val jObj = JSONObject(jsonStr) val str = jsonStr.toString() // ex: 3 val bing = JSONObject("""{"one":"test1", "two":"test2"}""")
Все три из этих примеров возвращают [объект Object] и не могут получить доступ ни к чему внутри них. Я пробовал анализировать, нанизывать и анализировать — просто отчаянно пытаясь заставить это работать вместо того, чтобы создавать одну большую строку и извлекать из нее то, что мне нужно.
Так возможно ли это? Если да, то что я упускаю?
Комментарии:
1.
val jsonString = Gson().toJson(student)
это справедливо[object Object]
?2. да, это отображается как [объект-объект]
3.
someObject.toString()
вернул бы это.. если вы можете упорядочить объект в kotlin, а затем проанализировать его в js, проблем быть не должно ;-;4. я имею в виду, что..
console.log(`${someObject}`)
показалsomeObject.toString()
бы lt;brgt;В примере 1, когда вы используете функцию lt;brgt;Log.i
, еслиstudent.name
это объект, который вы просто увидите[object Object]
только из-за того, как вы его регистрируетеlt;brgt;Однако тот факт, что вы смогли это сделать lt;brgt;student.name
, означает, что объект существует5. Он существует, и свойства доступны внутри Котлина, да. При передаче в javascript что-то происходит с объектом, и я не могу получить доступ к объекту.