Есть текстовое поле которое при первом запуске пусто и пользователь вбивает в него имя. При повторном запуске в поле имя уже должно отражаться. Использую SharedPreferences для сохранения. код :
public class MainMenu extends AppCompatActivity
{
Button saveBTB;
public static final String APP_PREFERENCES = "mySettings";
public static final String APP_PREFERENCES_NAME = "Name";
SharedPreferences App_Settings;
EditText etN;
EditText etF;
SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_menu);
if (App_Settings.contains(APP_PREFERENCES_NAME))
{
etN = (EditText) findViewById(R.id.editText7);
etN.setText(App_Settings.getString(APP_PREFERENCES_NAME,""));
}
saveBTB = (Button) findViewById(R.id.saveBTB);
saveBTB.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
etN = (EditText) findViewById(R.id.editText7);
String NameProfil = etN.getText().toString();
App_Settings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
editor = App_Settings.edit();
editor.putString(APP_PREFERENCES_NAME, NameProfil);
editor.apply();
}
});
} }
Проект вылетает на if
. Без этого условия все вроде работает. В чем ошибка в этом коде ? Тестирую через BlueStack.
Объект App_Setting
инициализуертся у вас в методе onClick()
. Когда вы обращаетесь к нему в методе onCreate()
, он не инициализирован - объект пустой и сравнивать там нечего и не с чем. Данному вопросу посвящены разделы документации и литературы о областях видимости переменных и о полях класса.
public class MainMenu extends AppCompatActivity {
public static final String APP_PREFERENCES = "mySettings";
public static final String APP_PREFERENCES_NAME = "Name";
private final SharedPreferences appSettings;
private final EditText etN;
private final EditText etF;
private final Button saveBTB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_menu);
appSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
etN = (EditText) findViewById(R.id.editText7);
saveBTB = (Button) findViewById(R.id.saveBTB);
if (appSettings.contains(APP_PREFERENCES_NAME)) {
etN.setText(appSettings.getString(APP_PREFERENCES_NAME,""));
}
saveBTB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String NameProfil = etN.getText().toString();
Editor editor = appSettings.edit();
editor.putString(APP_PREFERENCES_NAME, NameProfil);
editor.apply();
}
});
}
}
Исправлено несколько логических ошибок. В частности, не нужно получать ссылку на виджет каждый раз при обращении, это довольно дорогая операция, которая ничего нового при опросе после каждого клика не сообщит. Ссылки на виджеты получают один раз, в начале метода onCreate()
и в дальнейшем используют сохраненную в поле класса ссылку.
Так же неплохо ознакомится с конвенцией оформления кода в Java, в частности имена экземпляров классов пишутся в lowerCamalCase-стиле, без всяких прочерков, это может показаться незначительным, но читать подобную самодеятельность больно для глаз и если показываете код кому то, то уж придерживайтесь конвенции. Сами имена переменным, полям класса, методам и собственно классам принято давать осмысленные, отражающие суть скрывающегося за ним, все эти etN
вас самого начнут сильно утомлять, когда проект примет сколько-нибудь существенный объем.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
URL Rewriting как я понял нужен для поддержания сессии в случае если в браузере отключены куки (Поправьте пожалуйста, если я не прав)
Добрый день, мне необходимо спроксировать доступ к api с помощью spirng integrationСконфигурировал inboundGateway и outboundGateway
Такая проблема, не знаю в чем сольДля теста, в программе надо сделать имитацию нажатия правой кнопки мыши, чтобы перейти в определенную форму