Intereting Posts
Не удалось удалить каталог в Android Studio Нажмите на уведомление, чтобы ввести мое приложение в андроид Предупреждение Google Play и OpenSSL Кнопка Android back не работает во время воспроизведения видео в VideoView Android: просмотр списка идентификаторов Android: Как автоматически генерировать Java-код из файла макета? Можно ли отменить предыдущий Toast, когда я хочу показать другой Toast? Как изменить стиль текста в преференциальном фрагменте Android Game API: Leaderboard – получить конкретный счет игрока? Как проверить разрешение предоставлено для пути к каталогу и не будет обрабатывать ошибку EACCES? Зависимости от компиляции с несколькими вкусами в градиенте Две кнопки плавающего действия рядом друг с другом Возможно ли динамически загружать класс Activity из библиотеки jar на sdCard и фактически использовать его? Ошибка Android «Not_Market_Managed» Проверка синхронизации файлов с помощью Drive API

Невозможно сделать статическую ссылку на нестатический метод (Android getApplicationContext ())

Я сохраняю глобальную переменную, которая необходима для всех видов деятельности в моем приложении для Android, используя подкласс android.app.Application, как объясняется Soonil (в разделе « Как объявить глобальные переменные в Android?» ).

Подход выглядит так:

class MyApp extends Application { private String myState; public String getState(){ return myState; } public void setState(String s){ myState = s; } } class Blah extends Activity { @Override public void onCreate(Bundle b){ ... MyApp appState = ((MyApp)getApplicationContext()); String state = appState.getState(); ... } } 

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

 Cannot make a static reference to the non-static method getApplicationContext() from the type ContextWrapper 

Ключевым отличием от предыдущего является то, что новая активность фактически является фрагментом (точнее, SherlockFragmentActivity).

Любые идеи, почему я не могу получить доступ к appState, как у меня раньше, и есть ли хороший способ обхода?

Большое спасибо.


EDIT: Хороший улов, Мэтт Б. Оказывается, место, которое я на самом деле вызываю getApplicationContext (), находится внутри другого класса. Вот вызывающий момент:

 public class MyActivity extends SherlockFragmentActivity { public static class AccountListFragment extends SherlockListFragment { MyApp appState = ((MyApp)getApplicationContext()); ... } ... } 

Кроме того, как отмечено ниже, ошибка исчезла, когда я изменил вызов на

 MyApp appState = ((MyApp)getActivity().getApplicationContext()); 

Solutions Collecting From Web of "Невозможно сделать статическую ссылку на нестатический метод (Android getApplicationContext ())"

 getActivity().getApplication() 

Должен работать нормально.

Сначала вам нужна ссылка на активность, затем на приложение

Разница в том, что вы теперь вызываете эту функцию из фрагмента (даже если вы назвали его «Activity») вместо Activity