Ошибка при чтении пользовательского ввода в Kotlin - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь создать поисковый запрос без панели действий, используя autocompletetextview. Пока что макет и предложение работают, но когда я печатаю для поиска, любой набранный мной символ дает тот же результат, и он не дает подсказки на основе набранного текста. И я снова проверяю, что мой ввод был "d", поэтому я изменяю его на:

val userInput = readLine()!!
insertData(userInput, 10, "id/suggest")

В это время я получаю сообщение об ошибке. Вот мой лог

E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.fobuma.postrequest, PID: 17116 java.lang.RuntimeException: невозможно запустить действие ComponentInfo {com.fobuma.postrequest / com.fobuma.postrequest.MainActivity}: java.lang.IllegalArgumentException: кодировки с несколькими символами на байт не поддерживаются. на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2778) на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2856) atroid.app.ActivityThread.-wrap11 (неизвестный источник: 0) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1589) на android.os.Handler.dispatchMessage (Handler.java:106) на android.os.Looper.loop (Looper.java:164) на android.app.ActivityThread.main (ActivityThread.java:6494) в java.lang.reflect.Method.invoke (родной метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:438) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807) Вызывается: java.lang.IllegalArgumentException: кодировки с несколькими символами на байт не поддерживаются на kotlin.io.ConsoleKt.readLine (Console.kt: 157) на kotlin.io.ConsoleKt.readLine (Console.kt: 154) в com.fobuma.postrequest.MainActivity.onCreate (MainActivity.kt: 26) на android.app.Activity.performCreate (Activity.java:7009) на android.app.Activity.performCreate (Activity.java:7000) на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1214) на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2731) на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2856) atroid.app.ActivityThread.-wrap11 (неизвестный источник: 0) в android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1589) на android.os.Handler.dispatchMessage (Handler.java:106) на android.os.Looper.loop (Looper.java:164) на android.app.ActivityThread.main (ActivityThread.java:6494) в java.lang.reflect.Method.invoke (родной метод) в com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit.java:438) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:807)

Итак, помогите мне, как решить это. Заранее спасибо.

1 Ответ

0 голосов
/ 10 января 2019

Во-первых, вы не должны использовать readLine на Android. Этот метод считывает из стандартного потока ввода, что имеет смысл в консольном приложении, но не в Android, поскольку это не тот способ, которым ваш пользователь взаимодействует с приложением (см. Также здесь и здесь ).

Вместо этого вы, вероятно, захотите создать EditText в своем пользовательском интерфейсе, в который пользователь может вводить данные, и прочитать значение из него, используя getText.


Буквальное объяснение вашего исключения: если посмотреть на источник , то readLine использует декодер, возвращаемый Charset.defaultCharset().newDecoder() в своей реализации, и требует этого CharsetDecoder работать с одним символом на байт - у реализации, возвращаемой в Android, максимум 2 символа на байт, поэтому вызов require в реализации readLine вызывает исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...