Как использовать глобальные переменные в других действиях - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь получить глобальную переменную из одного класса в другом классе, но она получает только пустую строку.

class Abfahrtsmonitor : AppCompatActivity() {

    // Initializing an empty ArrayList to be filled with animals
    val Haltestellen: ArrayList<String> = ArrayList()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val Haltestellenname = MapsAnzeigeActivity().haltestellen_name
    }
}

это то, что я хочу. Мой класс MapsAnzeigeActivity выглядит примерно так:

class MapsAnzeigeActivity : AppCompatActivity(), OnMapReadyCallback {
    var haltestellen_name = "" 

    override fun onCreate(savedInstanceState: Bundle?) {
        // ....
    }

    fun changeHaltestellen() {
        haltestellen_name = "new"
    }
}

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

У вас есть несколько вариантов сделать это:

Сначала вы можете создать подобный класс-одиночка и получать данные в любое время.

public class MyData {

    private ArrayList<String> data;
    private static MyData INSTANCE = new MyData();
    private MyData() {

    }

    public static MyData getInstance() {
           return INSTANCE;
    }

    public ArrayList<String> getData() {
           return this.data;
    }

}

И когда вам захочетсяполучите ваши данные попробуйте этот код:

MyData.getInstance().getData() 

он сохранит ваши данные в памяти, и когда вы закроете приложение, ваши данные будут потеряны.

Другой вариант - сохранить ваши данные вSharedPrefs или Sqlite имеют свои преимущества: вы можете получать свои данные, даже если ваше приложение закрыто.

Еще один простой способ - сделать ваши данные статичными.

public static ArrayList<String> data = new ArrayList();
0 голосов
/ 12 сентября 2018

Когда вы запустите этот код:

val Haltestellenname = MapsAnzeigeActivity().haltestellen_name

Он создаст новый экземпляр MapsAnzeigeActivity, потому что значение по умолчанию haltestellen_name равно "", поэтому вы получили пустую строку.

Чтобы создать глобальные переменные (в Java это называется статической переменной), вы должны использовать Сопутствующий объект .

class MapsAnzeigeActivity : AppCompatActivity(), OnMapReadyCallback {
    companion object {
       var haltestellen_name: String
    }
}

class Abfahrtsmonitor : AppCompatActivity() {
    // Initializing an empty ArrayList to be filled with animals
    val Haltestellen: ArrayList<String> = ArrayList()
    val Haltestellenname = MapsAnzeigeActivity.haltestellen_name
}
0 голосов
/ 12 сентября 2018

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

class MapsAnzeigeActivity : AppCompatActivity(), OnMapReadyCallback {
    companion object {
       var haltestellen_name: String
    }
}

class Abfahrtsmonitor : AppCompatActivity() {

// Initializing an empty ArrayList to be filled with animals
val Haltestellen: ArrayList<String> = ArrayList()
val Haltestellenname = MapsAnzeigeActivity.haltestellen_name
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...