Сохраняйте значения в классе Application, используя Kotlin - PullRequest
0 голосов
/ 04 ноября 2019

Мы знаем, что класс Application ведет себя как одноэлементный, поэтому мы можем хранить там некоторые данные сеанса приложения и взаимодействовать с ним с разных экранов. Например, мы делаем это в Java следующим образом:

public class App extends Application {

    public static String myString;

    @Override
    public void onCreate() {
        super.onCreate();
    }

    public static String getMyString() {
        return myString;
    }

    public static void setMyString(String myString) {
        App.myString = myString;
    }

}

И мы можем использовать его примерно так App.setMyString("blah blah") и обращаться к этому значению откуда угодно, вот так: App.getMyString()

Я пыталсяизмените это на kotlin безуспешно:

class App : Application() {

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

    companion object {
        var myString: String = null

        fun setMyString(str: String) {
            myString = str
        }

        fun getMyString(): String? {
            return myString
        }
    }

    init {
        myString = String()
    }
}

Эта переменная не сохраняет мое значение

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Если вы хотите использовать Singleton pattern и если вы не зависите ни от чего из Application, Activity or Fragment, то лучшим решением будет использование object.

Как это

object MyString {

    var myString: String = String()

    fun setMyStringData(str: String) {
        myString = str
    }

    fun getMyStringData(): String = myString

}

Использование это

MyString.setMyStringData("string")
MyString.getMyStringData()

Это не будет загрязнять ваши другие классы, и вы достигнете того, что вы хотели. Если вам нужно что-то из какого-либо класса, тогда вы должны использовать companion object в этом классе.

0 голосов
/ 04 ноября 2019

Вот как вы можете присвоить значение своей переменной

class App : Application() {

    override fun onCreate() {
        super.onCreate()

    }

    companion object {
        var myString: String? = null

        fun setMyStringData(str: String) {
            myString = str
        }

        fun getMyStringData(): String? {
            return myString
        }
    }

    init {
        myString = String()
    }


}

Как использовать Для установленных данных

App.myString = "Я назначил данные"

App.setMyStringData («Я назначаю данные»)

Для получения данных

Log.i (TAG, App.myString)

Log.i (TAG, App.getMyStringData?: «Я нулевой»)

Вы столкнулись с любой проблемой с setMyString и getMyString , который уже определен в java, поэтому просто измените имя функции, которая также работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...