использовать stati c android context в методе stati c - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть PrefUtils класс, подобный этому:

public class PrefUtils {

    public PrefUtils() {
    }

    private static SharedPreferences getSharedPreferences(Context context) {
        return context.getSharedPreferences("APP_PREF", Context.MODE_PRIVATE);
    }

    public static void storeAccessToken(Context context, String access_token) {
       SharedPreferences.Editor editor = getSharedPreferences(context).edit();
       editor.putString("Access_Token", access_token);
       editor.commit();
    }

    public static String getAccessToken(Context context) {
        return getSharedPreferences(context).getString("Access_Token", null);
    }
}

В моем MainActivity у меня есть метод stati c, и я должен использовать для него контекст stati c:

public class MainActivity extends AppCompatActivity {

private static Context mcontex;
// Is It right To Add Context To static Variable???

@SuppressLint("CheckResult")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    my_method();

}
    public static void my_method(){
        String access_token =PrefUtils.getAccessToken(mcontex);
        // more code ...
    }
}

Правильно ли добавить Context в переменную stati c? Android Studio говорит: «Не помещайте Android Класс контекста в поле c». Это вызывает ошибку как утечка памяти? И если ответ Да, каков правильный путь?

1 Ответ

1 голос
/ 09 февраля 2020

Передайте Context в качестве параметра методу вместо сохранения context в переменной * stati c.

public static void myMethod(@NonNull Context context){

        String access_token =PrefUtils.getAccessToken(context);
        // more code ...
    }

Недостаток наличия контекстной переменной stati c состоит в том, что нет гарантии, что non-stati c onCreate () будет вызван до того, как какой-либо код инициализации stati c попытается чтобы получить ваш c объект контекста. Это означает, что ваш вызывающий код должен быть готов к работе с нулевыми значениями.

...