Как я могу получить доступ к ресурсам приложения Android (например, строки) из статического контекста в Kotlin? - PullRequest
0 голосов
/ 23 октября 2018

Я хочу читать строки из XML-файла в исходном файле без контекста.В идеале я хотел бы сделать что-то вроде этого: Как я могу получить контент ресурса из статического контекста?

Однако я не могу понять, как преобразовать это в Kotlin.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Вы НИКОГДА не должны делать Контекст статическим.Это плохая практика и может привести к утечке памяти и другим проблемам.

Кстати в Kotlin статика заменена на "объект-компаньон".Таким образом, ваш код может выглядеть следующим образом.И снова - не храните контекст.

class MyApplication: Application {

    override fun onCreate() {
        super.onCreate()
        sContext = this
    }

    companion object {
        var sContext: Context? = null
    }
}

Но ЛУЧШИЙ способ - хранить нужные вам статические ресурсы, но не контекст.

0 голосов
/ 23 октября 2018

Это в основном то же самое.Котлин не слишком отличается от Java.Фактически, вставка кода Java в файл Kotlin в Android Studio приведет к появлению запроса с вопросом, хотите ли вы преобразовать этот код.

В любом случае:

Класс приложения:

class App : Application() {
    companion object {
        var context: Context? = null
    }

    override fun onCreate() {
        super.onCreate()

        context = this;
    }
}

Затем из любого другого класса:

val context = App.context
val someString = context?.resources.getString(R.string.some_string) //context is nullable so "?" is needed

Не забудьте добавить

android:name=".App"

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

Если вам нужно получить к нему доступ из Java:

App.COMPANION.getContext();

Android Studio может жаловаться на утечки контекста.Однако это не должно быть точным, поскольку контекст приложения будет существовать до тех пор, пока ваше приложение работает, и как только ваше приложение будет убито (или остановлено), не будет даже запущенной JVM с утечкой.

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