Intereting Posts
В чем разница между EventBus и RxJava? Как увеличить зону действия кнопки Android без масштабирования фона? LocalBroadcastManager vs Context.registerReceiver (), Context.sendBroadcast (Intent) и Context.unregisterReceiver () – они такие же? Android 5.0 – Добавление заголовка / нижнего колонтитула в RecyclerView Предупреждение Android MediaPlayer: должен быть установлен контроллер субтитров Лучшая практика для обновления аргументов фрагмента? Где я могу получить драйвер Radio с открытым исходным кодом и RIL для телефона Android? Предотвращение отклонения диалога при повороте экрана в Android Android имитирует нажатие клавиши Как автоматически отображать активность через 5 секунд Ключ должен быть идентификатором ресурса приложения Как получить силу сигнала LTE в Android? Не удалось восстановить отсутствующее хранилище отладки? Скрытые фрагменты backstack, повторно отображаемые при изменении конфигурации ShouldNotReachhere classFileParser ANDROID

Лучший способ получить контекст приложения в статический метод в Android

Я работаю над Android-приложением, которое имеет несколько действий. В нем у меня есть класс с несколькими статическими методами. Я хотел бы иметь возможность называть эти методы разными действиями. Я использую статические методы для загрузки данных из XML-файла с помощью XmlResourceParser. Для создания XmlResourceParser требуется вызов контекста приложения. Итак, мой вопрос: какой лучший способ получить ссылку на контекст приложения в статические методы? Получают ли каждое действие его и передают? Хранить его каким-то образом в глобальной переменной?

Solutions Collecting From Web of "Лучший способ получить контекст приложения в статический метод в Android"

Лучше всего было бы передать объект Activity в качестве параметра для статических функций.

AFAIK нет такого метода, который предоставит вам контекст приложения в статическом методе.

Я не уверен, что это будет работать все время, но теперь это работает для меня:

public class myActivity extends ListActivity { public static Context baseContext; public void onCreate(Bundle savedInstanceState) { baseContext = getBaseContext(); } 

Затем вы можете использовать статику в своем пакете:

 myApplication.baseContext 

Есть ответ в блоге Sane Tricks For InsaneWorld с ответом. В нем говорится, что вы можете заменить объект Application своим собственным подклассом, а затем статически поддерживать контекст приложения. Вы можете найти пример кода в сообщении.

Исходное сообщение в блоге – http://uquery.blogspot.co.il/2011/08/how-to-get-application-context.html

Это должно обеспечить вам доступ к applicationContext из любого места, позволяя вам получать applicationContext любом месте, где можно его использовать; Toast , getString() , sharedPreferences и т. Д. Я использовал это для многократного получения applicationContext внутри статических методов.

Синглтон:

 package com.domain.packagename; import android.content.Context; /** * Created by Versa on 10.09.15. */ public class ApplicationContextSingleton { private static PrefsContextSingleton mInstance; private Context context; public static ApplicationContextSingleton getInstance() { if (mInstance == null) mInstance = getSync(); return mInstance; } private static synchronized ApplicationContextSingleton getSync() { if (mInstance == null) mInstance = new PrefsContextSingleton(); return mInstance; } public void initialize(Context context) { this.context = context; } public Context getApplicationContext() { return context; } } 

Инициализируйте Singleton в подклассе Application :

 package com.domain.packagename; import android.app.Application; /** * Created by Versa on 25.08.15. */ public class mApplication extends Application { @Override public void onCreate() { super.onCreate(); ApplicationContextSingleton.getInstance().initialize(this); } } 

Если я не ошибаюсь, это дает вам доступ к applicationContext везде, назовите его с помощью ApplicationContextSingleton.getInstance.getApplicationContext(); Вы не должны очищать это в любой момент, так как когда приложение закрывается, все равно это происходит.

Не забудьте обновить AndroidManifest.xml для использования этого подкласса Application :

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.domain.packagename" > <application android:allowBackup="true" android:name=".mApplication" <!-- This is the important line --> android:label="@string/app_name" android:theme="@style/AppTheme" android:icon="@drawable/app_icon" > 

Пожалуйста, дайте мне знать, если вы видите что-то не так, спасибо. 🙂