Intereting Posts

Невозможно сделать статическую ссылку на нестатический метод (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