无法在Kotlin代码中显示EditText错误

时间:2016-01-31 17:30:14

标签: android android-edittext kotlin

我已将我的Android开发转移到Kotlin,但我正在处理一个我无法弄清楚的崩溃。我习惯于Java,能够在空EditText上显示错误:

if(mEmail.getText().toString().isEmpty()) {
   mEmail.setError("Email cannot be blank.");
}

据我所知,这可以转换为Kotlin:

if(email.text.toString().isEmpty()) {
   email.error = "Email cannot be blank."
}

然而,这不起作用,我得到以下堆栈跟踪:

Process: com.androidessence.capturethetag, PID: 4016
android.view.InflateException: Binary XML file line #17: Error inflating class TextView
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:482)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
    at android.widget.Editor.showError(Editor.java:319)
    at android.widget.Editor.setError(Editor.java:355)
    at android.widget.TextView.setError(TextView.java:4648)
    at android.widget.TextView.setError(TextView.java:4633)
    at com.androidessence.capturethetag.activities.LoginActivity.validateInput(LoginActivity.kt:31)
    at com.androidessence.capturethetag.activities.LoginActivity.access$validateInput(LoginActivity.kt:12)
    at com.androidessence.capturethetag.activities.LoginActivity$onCreate$1.onClick(LoginActivity.kt:19)
    at android.view.View.performClick(View.java:4780)
    at android.view.View$PerformClick.run(View.java:19866)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5254)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
 Caused by: java.lang.RuntimeException: Failed to resolve attribute at index 24
    at android.content.res.TypedArray.getColor(TypedArray.java:401)
    at android.widget.TextView.<init>(TextView.java:696)
    at android.widget.TextView.<init>(TextView.java:632)
    at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:60)
    at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:56)
    at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:92)
    at android.support.v7.app.AppCompatDelegateImplV7.createView(AppCompatDelegateImplV7.java:938)
    at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:992)
    at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:725)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:482) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
    at android.widget.Editor.showError(Editor.java:319) 
    at android.widget.Editor.setError(Editor.java:355) 
    at android.widget.TextView.setError(TextView.java:4648) 
    at android.widget.TextView.setError(TextView.java:4633) 
    at com.androidessence.capturethetag.activities.LoginActivity.validateInput(LoginActivity.kt:31) 
    at com.androidessence.capturethetag.activities.LoginActivity.access$validateInput(LoginActivity.kt:12) 
    at com.androidessence.capturethetag.activities.LoginActivity$onCreate$1.onClick(LoginActivity.kt:19) 
    at android.view.View.performClick(View.java:4780) 
    at android.view.View$PerformClick.run(View.java:19866) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5254) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

为什么这会在Kotlin崩溃?

修改

有关详细信息,您可以查看我的content_login.xml文件here。我用Gist来节省空间。

此外,我从未在findViewById();上致电EditText,因为Kotlin-Android Extension Plugin可以执行此操作,如此处所述:https://kotlinlang.org/docs/tutorials/android-plugin.html

我毫不怀疑它引用了正确的EditText,因为日志记录显示它能够确定EditText为空,但无法设置错误属性。

0 个答案:

没有答案