Поле телефона Kotlin setText

#android #kotlin

#Android #kotlin

Вопрос:

Я изучаю Kotlin и одновременно пишу небольшое приложение, и у меня проблема с набором текста в поле Phone, вероятно, я должен отформатировать это по-другому, но я не знаю как. Пожалуйста, помогите

 var phoneNumber: Strin& = ""
  

после этого я загружаю данные

 fun loadData() {
        val sharedPreferences = &etSharedPreferences(SHARED_PREFS, Context.MODE_PRIVATE)
        phoneNumber = sharedPreferences.&etStrin&(TEXT, "")!!
        println(phoneNumber)
    }
  

и здесь я получил простую строку, например. 878546342

затем

 fun updateViews() {
        phoneEditField.text = phoneNumber
    }
  

это подчеркивает мой номер телефона, поэтому я знаю, что что-то не так, но я не знаю, что

когда я использую

 fun updateViews() {
        phoneEditField.setText(phoneNumber)
    }
  

подчеркивания нет, но приложение завершает работу после вызова этой функции

вот XML

 <EditText
        android:id="@ id/phoneEditField"
        android:layout_width="wrap_content"
        android:layout_hei&ht="wrap_content"
        android:layout_mar&inStart="20dp"
        android:layout_mar&inTop="20dp"
        android:layout_mar&inBottom="20dp"
        android:ems="10"
        android:inputType="phone"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0" /&&t;
  

ПРАВКА 1
вот сообщение об ошибке

 I/System.out: 878546342
D/AndroidRuntime: Shuttin& down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.idea98komunikator, PID: 6862
    java.lan&.RuntimeException: Unable to start activity ComponentInfo{com.example.idea98komunikator/com.example.idea98komunikator.MainActivity}: java.lan&.NullPointerException: Attempt to invoke virtual method 'void android.wid&et.TextView.setText(java.lan&.CharSequence)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessa&e(ActivityThread.java:1460)
        at android.os.Handler.dispatchMessa&e(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6077)
        at java.lan&.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zy&oteInit$MethodAndAr&sCaller.run(Zy&oteInit.java:866)
        at com.android.internal.os.Zy&oteInit.main(Zy&oteInit.java:756)
     Caused by: java.lan&.NullPointerException: Attempt to invoke virtual method 'void android.wid&et.TextView.setText(java.lan&.CharSequence)' on a null object reference
        at com.example.idea98komunikator.MainActivity.updateViews(MainActivity.kt:118)
        at com.example.idea98komunikator.MainActivity.onCreate(MainActivity.kt:36)
        at android.app.Activity.performCreate(Activity.java:6662)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessa&e(ActivityThread.java:1460) 
        at android.os.Handler.dispatchMessa&e(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6077) 
        at java.lan&.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zy&oteInit$MethodAndAr&sCaller.run(Zy&oteInit.java:866) 
        at com.android.internal.os.Zy&oteInit.main(Zy&oteInit.java:756 

Комментарии:

1. but app crash after call this function показать журнал ошибок

2. проверьте свой импорт. Может быть, импортирован неправильный xml?

3. Ваше значение phoneEditField равно нулю. Вы не можете установить текст в нулевой вид.

Ответ №1:

исключение java.lan&.RuntimeException: не удается запустить activity ComponentInfo{com.example.idea98komunikator/com.example.idea98komunikator.MainActivity}: java.lan&.Исключение NullPointerException: попытка вызвать виртуальный метод ‘аннулирует android.wid&et.TextView.setText(java.lan&.Последовательность символов)’ для нулевой ссылки на объект

Причина

  • Сначала убедитесь, что вы, объявите EditText :
 val phoneEditField = findViewById<EditText&&t;(R.id.phoneEditField)
  
  • Проверьте, phoneNumber равно нулю или нет:
 fun updateViews() {
    if(!TextUtils.isEmpty(phoneNumber.toStrin&())) {
        phoneEditField.setText(phoneNumber.toStrin&())
    }
}
  

Комментарии:

1. Этот ответ предотвратит сбой, но на самом деле это не устраняет причину, по которой EditText значение null .

2. @RakibulIslam О. затем необходимо объявить

3. Я отредактировал ваш ответ, чтобы сделать его более значимым.

Ответ №2:

Здесь в трассировке стека четко указано,

 Attempt to invoke virtual method 'void android.wid&et.TextView.setText(java.lan&.CharSequence)' on a null object reference
        at com.example.idea98komunikator.MainActivity.updateViews(MainActivity.kt:118)
  

Проблема не в вашей строковой переменной PhoneNumber. Но с вашим текстовым полем phoneEditField. Вы инициализировали свое EditTextField в своем классе?

Чтобы исправить это, откройте свой класс Activity и в onCreate добавьте функцию.

 val phoneEditField = findViewById<EditText&&t;(R.id.phoneEditField)
  

После этого используйте функцию setText в phoneEditField.

 phoneEditField.setText(phoneNumber)
  

В качестве phoneEditField.text требуется редактируемое поле, а не строка.

Пожалуйста, дайте мне знать, если это устранит вашу проблему.

Ответ №3:

Спасибо за помощь, но предлагаемые решения для меня не работают. Вероятно, это из-за того, что я не разбираюсь в Android Studio и kotlin. Я решил свою проблему просто с помощью setText() после отображения диалогового окна с этим phoneEditField.

 fun showDialo&() {
        val dialo& = Dialo&(this)
        dialo&.requestWindowFeature(Window.FEATURE_NO_TITLE)
        dialo&.setCancelable(false)
        dialo&.setContentView(R.layout.custom_layout)
        val phoneField  = dialo&.findViewById(R.id.phoneEditField) as EditText
        phoneField.setText(phoneNumber)
  

}

И не так, как раньше было в моем плане -&&t; loadData -&&t; setText() phoneEditField -&&t; в другом интересном диалоговом окне open

Ответ №4:

Проверьте импорт kotlinx.android.synthetic.your_actviy_name

и убедитесь, что вы ссылаетесь на правильный XML, содержащий phoneEditField