Мне около 6 недель изучать Java и по-прежнему бороться с реализацией статических методов (думаю, я действительно это понял, но это оказалось неправильным!).Имея трудное время для статического метода, который использует нестатические методы
Я пытаюсь сделать доступной локально сохраненную пару ключ-значение публично. Вот мой исходный код:
public class Settings extends Activity implements OnClickListener {
public Settings(TextView loginText, TextView passwdText) {
super();
this.loginText = loginText;
this.passwdText = passwdText;
}
public static String getDriverNum() {
SharedPreferences sp = getSharedPreferences(DELEX_SP, MODE_PRIVATE); <---ERROR
String Login = sp.getString("KeyLgn", "No Login Found");
return Login;
}
Конечно, я получаю сообщение об ошибке «Не удаюсь сделать статическую ссылку на нестатический getSharedPreferences метода (String, Int) от типа ContextWrapper», поэтому я стараюсь, чтобы обернуть НЕРАСПРОСТРАНЕНИЕ -static метод в моем собственном общедоступном методе, как аналогичный StackOverflow answer указан:
public class Settings extends Activity implements OnClickListener {
public Settings(TextView loginText, TextView passwdText) {
super();
this.loginText = loginText;
this.passwdText = passwdText;
}
public static String getDriverNum() {
String Login = getSharedPref().getString("KeyLgn", "No Login Found"); <-- SAME ERROR
return Login;
}
public SharedPreferences getSharedPref() {
SharedPreferences sp = getSharedPreferences(DELEX_SP, MODE_PRIVATE);
return sp;
}
Но это только вызвал такую же ошибку, как я решить не призыв к нестатическим getSharedPreferences метода. Каков наилучший способ решить эту проблему? Создать класс, который обертывает getSharedPreferences вместо этого?
Благодарим за терпение, пока я борюсь со статической номенклатурой.
** Я пытаюсь сделать доступной локально сохраненную пару ключ-значение доступной публично. ** - Помимо ваших проблем со статическим подходом, в основном ** НЕ ** старайтесь делать то, что вы делаете с Android-активностью. Это противоречит философии дизайна Android. Активность Android - это особый случайный класс, и вы не должны публично публиковать какие-либо поля или методы (статические или другие) - изучать/принимать это или быть готовыми к будущим проблемам. Чтобы сделать то, что вы пытаетесь сделать, вы должны, вероятно, расширить класс Application - никогда не делайте этого в рамках Activity. – Squonk
Спасибо. Я фактически создал класс non-Activity для реализации моего подхода, основанного на значении стоимости, но столкнулся с проблемой там (конечно). Поэтому попробовал временно переместить его в «Настройки» (класс «Активность»), как на испытательном стенде, чтобы узнать, может ли быть что-то неотъемлемое свойство onCreate, которое помогло бы (да, я знаю, немой теперь в ретроспективе, но я был в отчаянии). Вернемся к классу non-Activity. – stuckInOldLodiAgain
Какие еще «классы» будут нуждаться в этом методе? – Squonk