#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