Значение переменной Kotlin отличается от того, что я назначаю (получено из другого класса Activity)

#android #kotlin

#Android #Kotlin

Вопрос:

Я очень новичок в Kotlin, и сейчас у меня действительно раздражающая проблема. Я не знаю, как точно определить этот способ, если есть какой-либо подобный случай, я могу исправить этот вопрос. Моя проблема такова: у меня есть 1 действие, которое получает данные с моего устройства, и когда оно получает данные, оно отправляет эти данные в другое действие, но это второе действие не всегда отображается в пользовательском интерфейсе, если пользователь нажимает кнопку на 1 действие, затем открывается 2. действие. Пока 2. activity не активен, данные, полученные с устройства, не отправляют 2.activity. В моем 2.activity есть счетчик массива и массива, в котором будут храниться данные. При считывании данных правильный счетчик массива увеличивается на единицу. И я проверяю этот счетчик, чтобы отобразить это значение на экране. В 2.activity функция, которая получает данные, показывает точное значение счетчика, но другая функция (которая будет проверять и отображать данные на экране) всегда показывает 0. Я думаю, что одновременно есть своего рода 2 активных действия, но я не уверен. Представление кода следующим образом:

1. Активность

 OnCreate{
....
//Get Button Click
    Button.setOnClickListener {
        val intent = Intent(this, 2.Activity_Class)
        startActivity(intent)
        send = true
    }



//On Data Trigger
//Send Data To 2.Activity if is opened
   if (send) {
                val handler = Handler(Looper.getMainLooper())
                handler.postDelayed({
                    // Run your task here
                   2.Activity_Class.getData(data.value.toHexString())
                }, 1)
            }
 

2. Активность

 var counter=0

showData(){
//When I'm writing counter in here counter = 0 always
if(counter>10){
  //Do work in here
  }
}


getData(data: String){
//Interpret Data ...
counter  
//This counter is correct (It's showing correct on log)
}
 

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

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

1. Между действиями существует стена. Вы даже не сможете получить ссылку на другой экземпляр activity, поэтому я не знаю, как вы вызывали его в своем коде выше. Прочитайте об обмене данными между ними. Для этого требуется отправка пакетов через intents. вы также можете установить результат, который возвращается к действию выше в стеке. developer.android.com/guide/components/activities /…

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

3. Действие, которого нет на экране, не будет запускать какой-либо свой код пользовательского интерфейса, поэтому на самом деле не имеет смысла описывать связь в реальном времени между действиями.

4. В моем случае другим activity является прослушиватель BLE, и он запускается при поступлении данных, после чего отправляет эти данные в activity (который отображается на экране), но также выполняется другая функция. Моя проблема, как и другая функция, отправляет данные в функцию текущего действия, но когда я пытаюсь прочитать эти данные в текущем действии, они всегда показывают ноль, но при вызове функции это не ноль. Одновременно выполняется примерно 2 одинаковых действия, но не уверен.

5. Одновременно выполняется только одно действие. Они находятся в стеке. Теперь возможно, что вы запустили поток, используя другое действие, которое все еще выполняется после того, как это действие опустилось в стек. Но этот поток пропускается после любого изменения конфигурации, например, при вращении экрана. Я бы использовал одно действие с отдельными фрагментами и использовал ViewModel для обработки связи, чтобы она оставалась живой и ничего не пропускала из-за изменений конфигурации.