Передача данных переменных между действиями (Kotlin) - Передача NULL вместо значения - PullRequest
0 голосов
/ 08 мая 2020

Я пытался передать две переменные из моего MainActivity.kt в свой HomeActivity.kt; isRunning (Boolean) и time_in_milli_seconds (Long), которые оба объявлены в MainActivity.

Я прочитал бесчисленное количество руководств и застрял на этом несколько дней. Я знаю, что это всего лишь несколько строк кода, но ни один из десятков примеров, которые я видел в Интернете (через YT или SE), не касался конкретной проблемы, с которой я столкнулся. Мои извинения, если это повторяющийся пост!

Вот мой код:

    class MainActivity : AppCompatActivity() {
        var isRunning: Boolean = false;
        var time_in_milli_seconds = 1000L

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

    //perform a bunch of other stuff where isRunning and time_in_milli_seconds have values that are not null 
...

            val intent = Intent(this@MainActivity, HomeActivity::class.java)
            intent.putExtra("isRunningHome", isRunning)
            intent.putExtra("lastKnownTimeLong", time_in_milli_seconds)

}}

и во втором действии:

    class HomeActivity : AppCompatActivity() {

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

            var intent = intent
            var var2 = intent.getBooleanExtra("isRunningHome")                
            var var1 = intent.getLongExtra("lastKnownTimeLong")

   }}

Но мой HomeActivity не будет компилироваться, поскольку каждая строка var1 и var2 выдает ошибку " для параметра DefaultValue не передано значение ". После некоторого дополнительного тестирования Kotlin, похоже, передает значения NULL для обеих переменных, но я, хоть убей, не могу понять почему - это вопрос на миллион долларов. В настоящее время программа даже не компилируется.

Я пробовал:

1) установка значений isRunning и time_in_milli_seconds в текстовый параметр текстовых представлений, а затем применение намерения к их соответствующим текстовым параметрам - результат - показал значение NULL после того, как «передано» в HomeActivity.

2) Преобразование длинных и логических переменных в строки и передача их в виде строк, затем использование getStringExtra в HomeActivity - это сработало для переменной Long, но не для логической. Это также кажется морально неправильным и очень плохой техникой программирования.

3) Изменение места размещения и извлечения намерений (внутри или вне OnCreate, внутри и снаружи функций и т. Д. c.). Это не повлияло на мой результат.

Любая помощь будет принята с благодарностью !!!!

1 Ответ

0 голосов
/ 08 мая 2020

Все, что вам нужно сделать, это указать значение по умолчанию

var var2 = intent.getBooleanExtra("isRunningHome", false)
var var1 = intent.getLongExtra("lastKnownTimeLong", 0L)
...