我正试图在没有操作栏的情况下使用自动完成文本视图创建搜索效果。到目前为止,布局和建议都是有效的,但当我键入搜索时,我键入的任何字符都会给出相同的结果,而且它不会根据我键入的文本给出建议。我再次检查,我的输入是";d";,所以我把它改成:
val userInput = readLine()!!
insertData(userInput, 10, "id/suggest")
在这段时间里,我犯了错误。这是我的日志
E/AndroidRuntime:致命异常:main进程:com.example.postrequest,PID:1716java.lang.RuntimeException:无法启动活动ComponentInfo{com.example.postrequest/com.example.postrequest.MainActivity}:java.lang.IllegalArgumentException:不支持每个字节包含多个字符的编码在android.app.ActivityThread.performLaunchActivity(ActivityThreads.java:2778)在android.app.ActivityThread.handleLaunchActivity(ActivityThreads.java:2856)在android.app.ActivityThread.-wrap11(未知来源:0)在android.app.ActivityThread$H.handleMessage(ActivityThreads.java:1589)在android.os.Handler.dispatchMessage(Handler.java:106)在android.os.Looper.loop(Looper.java:164)在android.app.ActivityThread.main上(ActivityThreads.java:6494)位于java.lang.reflect.Method.ioke(本机方法)网址:com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)网址:com.android.internal.os.ZygoteInit.main(ZygoteNit.java:807)由以下原因引起:java.lang.IollegalArgumentException:不支持每个字节包含多个字符的编码在kotlin.io.ConsoleKt.readLine(Console.kt:157)在kotlin.io.ConsoleKt.readLine(Console.kt:154)网址:com.example.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(ActivityThreads.java:2731)在android.app.ActivityThread.handleLaunchActivity(ActivityThreads.java:2856)在android.app.ActivityThread.-wrap11(未知来源:0)在android.app.ActivityThread$H.handleMessage(ActivityThreads.java:1589)在android.os.Handler.dispatchMessage(Handler.java:106)在android.os.Looper.loop(Looper.java:164)在android.app.ActivityThread.main上(ActivityThreads.java:6494)位于java.lang.reflect.Method.ioke(本机方法)网址:com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)网址:com.android.internal.os.ZygoteInit.main(ZygoteNit.java:807)
所以,帮我解决这个问题。提前谢谢。
您首先不应该在Android上使用readLine
。该方法从标准输入流中读取,这在控制台应用程序中是有意义的,但在Android上则不然,因为这不是用户与应用程序交互的方式(另请参阅此处和此处)。
相反,您可能希望在UI上创建一个EditText
,用户可以在其中键入,并使用getText
从中读取值。
对异常的字面解释是:从源代码来看,readLine
在其实现中使用了Charset.defaultCharset().newDecoder()
返回的解码器,并要求该CharsetDecoder
以每个字节一个字符的方式操作-在Android上返回的实现恰好每个字节最多有2个字符,因此readLine
实现中的require
调用引发异常。
如果你真的想在Android上的控制台上阅读,你可以做:
val scanner = Scanner(System.`in`)
userInput = scanner.nextLine()