Не удалось отправить строку из одного действия в другое (третье действие) в Android Studio с использованием Kotlin

#android #string #kotlin #android-intent #intentservice

Вопрос:

Итак, у меня есть три действия для моего приложения. Я беру имя пользователя у пользователя(на главном экране) и хочу показать его на последнем экране (Экран результатов). Я пробовал использовать строковые константы, а затем отправлять строковое значение с помощью намерения из одного действия во второе и в третье. Но я не могу увидеть имя на экране результатов. Что это я делаю не так ?

Я следую всем правилам, и приложение работает нормально без ошибок, но имя пользователя не отображается на экране.

В константах.кт

  const val USER_NAME: String = "user_name"    
 

В основной деятельности.тыс. т

 val nameEditText = findViewById<TextView>(R.id.name_edit_text)  
val name = nameEditText.text.toString()  
val Intent = Intent(this, QuizQuestionActivity::class.java)  
intent.putExtra(Constants.USER_NAME, name)  
startActivity(intent)
       
 

В QuizQuestionActivity.kt

 private var mUsername: String? = null 
mUsername = intent.getStringExtra(CONSTANTS.USER_NAME) 
val intent = Intent(this, ResultActivity::class.java)  
intent.putExtra(Constants.USER_NAME, mUsername)  
startActivity(intent)
 

В результате.кт

 val username = intent.getStringExtra(Constants.USER_NAME)  
tv_name.text = username
 

Это весь код, который я пытаюсь выполнить. Кто-нибудь, пожалуйста, помогите!!

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

1. Перед отправкой значения в ResultActivity вам нужно присвоить имя mUsername значению, полученному из намерения MainActivity, правильно? Имя пользователя = намерение.getStringExtra(Константы.ИМЯ ПОЛЬЗОВАТЕЛЯ)

2. @pepperlove , Да, извините, я на самом деле делаю это в коде, я забыл вставить это сюда. Но это все равно не работает

3. Можете ли вы получить значение в QuizQuestionActivity?

4. @pepperlove Я не уверен в этом, потому что я просто передаю это через это действие, фактически не показывая его в представлении. Должен ли я проверить это с помощью инструкции Log ?

5. может ли это быть связано с тем, что я использую TextInputLayout вместо редактируемого текста в xml ?

Ответ №1:

У меня есть два замечания в вашем фрагменте кода

1)У вас есть два постоянных файла?

  1. Константа.кт
  2. КОНСТАНТА.кт

Как и в вашем QuizQuestionActivity, есть строка

 mUsername = intent.getStringExtra(CONSTANTS.USER_NAME)
 

Независимо от файла, на который вы ссылаетесь, строковые значения поля USER_NAME должны быть одинаковыми.

2)Еще одна вещь в основной деятельности

 val Intent = Intent(this, QuizQuestionActivity::class.java)
intent.putExtra(Constants.USER_NAME, name)  
startActivity(intent)
 

Здесь переменная, которую вы используете, — это «Намерение».

 val Intent = Intent(this, QuizQuestionActivity::class.java)
 

и вы передаете «намерение» для начала деятельности

 intent.putExtra(Constants.USER_NAME, name)  
startActivity(intent)
 

Попробуйте это

В основной деятельности:

 val nameEditText = findViewById<TextInputEditText>(R.id.name_edit_text)
val name = nameEditText.text.toString()
val intent = Intent(this, QuizQuestionActivity::class.java)
intent.putExtra(Constants.USER_NAME, name)
startActivity(intent)
 

В QuizQuestionActivity:-

 var mUsername: String? = null
mUsername = intent.getStringExtra(Constants.USER_NAME)
val intent = Intent(this, ResultActivity::class.java)
intent.putExtra(Constants.USER_NAME, mUsername)
startActivity(intent)
 

В результате:-

 val username = intent.getStringExtra(Constants.USER_NAME)
tv_name.text = username
 

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

1. Да, вы были правы. Возникла проблема с намерением/Намерением, но, к сожалению, решение этой проблемы не решает основную проблему. Имя по-прежнему не отображается на экране результатов. Также использование findViewById<TextInputEditText> вместо <TextInputEditText><EditText> приводит к сбою приложения.