вставить строку в массив из другого действия - PullRequest
0 голосов
/ 11 января 2019

моя заявка

У меня есть 2 действия, первое - CategoryActivity, а второе - QuestionActivity. в CategoryActivity у меня есть recyclerview, в котором перечислены категории, а также в Category Activity, у меня есть массив. Когда я нажимаю на eksterior, он переходит к QuestionActivity, а когда я нажимаю на кнопку отправить, он возвращается к CategoryActivity и отправляет данные в Categoryotyctivity. отправленные данные были введены в массив, поэтому массив будет таким: array [] = {«1»}; затем я щелкаю по второму элементу в recyclerview, который является внутренним, затем он снова переходит к QuestionActivity, когда я нажимаю submit, он отправляет данные в CategoryActivity и добавляет их в предыдущий массив, поэтому массив будет выглядеть следующим образом: array [] = {«1», «1»}; и так до тех пор, пока не закончатся пункты в обзоре. Я пытался так:

QuestionActivity.kt

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_result)

    button_save.setOnClickListener(){
        val intent = Intent(this@ResultActivity, KategoriActivity::class.java)
        intent.putExtra(KategoriActivity.Companion.ARRAY, "1")
        startActivity(intent)
    }
}

CategoryActivity.kt

var list = arrayOf(intent.getStringExtra(ARRAY))
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_category)
    Toast.makeText(this@KategoriActivity, ""+ list, Toast.LENGTH_SHORT).show()


}
companion object {
    val ARRAY = "array"

}

override fun onBackPressed() {
    Toast.makeText(this@KategoriActivity, ""+ list, Toast.LENGTH_SHORT).show()
    if (list.size == kategoriDatas!!.size){
        onBackPressed()
    } else {
        val builder = AlertDialog.Builder(this)
        builder.setMessage("You Must Finish All The Category")

        // add a button
        builder.setPositiveButton("OK", null)

        // create and show the alert dialog
        val dialog = builder.create()
        dialog.show()
    }
    }

и проблема в том, что когда я открываю категорию активности, приложение останавливается, а в журнале говорится: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference

и данные не могут вытолкнуть в массив, пожалуйста, помогите мне

1 Ответ

0 голосов
/ 11 января 2019

Вы можете получить намерение только после того, как действие было создано. Чтобы убедиться в этом, лучше всего, если вы разместите код, который будет получать дополнения от Intents, в вашем onCreate.

Как это:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_category)
    Toast.makeText(this@KategoriActivity, ""+ list, Toast.LENGTH_SHORT).show()
    var list = arrayOf(intent.getStringExtra(ARRAY))
}

Если вы хотите иметь класс Application, содержащий информацию:

class MyApplication : Application(){
var list = emptyArray<String>()

  override fun onCreate() {
    super.onCreate()
  }
}

Чтобы использовать это в своей деятельности:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_category)
    Toast.makeText(this@KategoriActivity, ""+ list, Toast.LENGTH_SHORT).show()
    var list = (application as MyApplication).list
   // you can than use it to update or retrieve values from it
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...