Что я делаю не так с методом getActivity? - PullRequest
0 голосов
/ 28 февраля 2019

Я не могу до конца жизни понять, что делает метод getActivity.

Я относительно новичок в программировании Android и пытаюсь дать своему приложению небольшой собственный объем памяти.Для этого я использую SharedPreferences.Обычно я не буду копировать слово в слово то, что написано для разработчиков Android, но я собираюсь оставить надежду, потому что не могу заставить что-либо работать.Я даже не могу получить код с веб-сайта для правильной работы

Вот соответствующий код, который есть в моем приложении.

public String activeTab = "course_reg";
private static final String DEBUG_TAG = "Gestures";
public static final String MY_PREFS_NAME = "MyPrefsFile";

Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
        MY_PREFS_NAME, Context.MODE_PRIVATE);

Код от разработчиков Android приведен ниже.

Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
    getString(R.string.preference_file_key), Context.MODE_PRIVATE);

Вот сайт Страница разработчика Android: сохранение данных значения ключа

Каждый раз, когда я помещаю getActivity () в Android Studio, он говорит, что не может разрешить метод.

Я не знаю, что мне с ним делать, и каждый другой вопрос, который я задавал о переполнении стека, в конечном итоге мне ничего не говорит.

Что делаетgetActivity делать и / или что я делаю не так.

Ответы [ 4 ]

0 голосов
/ 28 февраля 2019

getActivity () - это метод, который принадлежит классам Fragment или FragmentCompat (проверьте эти классы в API Android), все, что он делает, это получает ссылку на контекст действия, к которому прикреплен фрагмент.

Если вам нужен доступ только к разделяемым предпочтениям, вам нужно вызвать getContext () или ключевое слово «this», если вы вызываете его из Activity или Service.

В вашем фрагменте кода яЯ предполагаю, что все это атрибуты или константы в вашем классе, поэтому измените его на это, если используете его из Activity или службы.Если вы используете его в другом не-андроидном объекте, вам придется обращаться к нему откуда-то еще (используйте кинжал и вставьте контекст, или у вас есть статическая ссылка на него в классе приложения, но этот последний вариант не рекомендуется).

public String activeTab = "course_reg";
private static final String DEBUG_TAG = "Gestures";
public static final String MY_PREFS_NAME = "MyPrefsFile";

Context context = getContext(); // or just Context context = this;
SharedPreferences sharedPref = context.getSharedPreferences(
        MY_PREFS_NAME, Context.MODE_PRIVATE);
0 голосов
/ 28 февраля 2019

Каждый раз, когда я помещаю getActivity () в Android Studio, он говорит, что не может разрешить метод.

Это потому, что, скорее всего, вы пишете свой фрагмент кода внутри класса, который расширяет Activityили AppCompatActivity, и ни у одного из них нет метода getActivity ().

Метод getActivity () присутствует в классе фрагментов и используется для получения ссылки на действие, к которому он присоединен.Этот метод может быть использован для выполнения задач, требующих контекст Activity

Вы можете просто использовать get SharedPreferences без добавления контекста.

@Override
protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   SharedPreferences sp = getSharedPreferences(MY_PREFS_NAME, Context.MODE_PRIVATE);
}
0 голосов
/ 28 февраля 2019

Ваш код будет работать, даже если вы замените код Google на следующее:

SharedPreferences sharedPref = this.getSharedPreferences(
getString(R.string.preference_file_key), Context.MODE_PRIVATE);

Это потому, что ваша деятельность расширяет класс активности Android, и если вы проверите документацию по классу активности Android, вы будетеобратите внимание, что для метода getSharedPreferences () необходим Context (Context.getSharedPreferences (..), который уже расширен классом Activity (Activity расширяет класс Context). Попробуйте заменить приведенный выше код вместо того, что у вас есть, и он должен работать.

0 голосов
/ 28 февраля 2019

Я относительно новичок в программировании android

И очень вероятно, что вы новичок в программировании, так как вы, возможно, знаете другой язык программирования, но вы находитесь в правильном месте!

Код:

Context context = getActivity();
SharedPreferences sharedPref = 
    context.getSharedPreferences(
        MY_PREFS_NAME, 
        Context.MODE_PRIVATE
    );

Является лишь частью кода.Это не важная часть, что вам нужно, потому что все не новички знают, что это такое.

В программировании (для меня) гораздо полезнее учиться поиску, чем изучать термины!В этом случае вам следует поискать «пример getSharedPreferences».

Чем вы увидите, если вы находитесь в классе Activity, чем не нужен getActivity.Если вы находитесь в классе Fragment или чем-то еще, чем нужно.Зависит от того, где вы находитесь.

Например здесь это не getActivity()

И здесь есть getApplicationContext()

И здесь вы найдете учебное пособие по его использованию

...