Имеется вот такой код:
...
public static final String APP_STORAGE = "AppStorageFile";
public static final String Name_1 = "TextName7";
private SharedPreferences SFE;
@Override
protected void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SFE = getSharedPreferences(APP_STORAGE, Context.MODE_PRIVATE);
...
SharedPreferences.Editor editor = SFE.edit();
editor.putString(Name_1, "Привет мир"));
editor.apply();
i = 1;
String Name_number = "Name_" + String.valueOf(i);
Log.d("TAG_LOG", Name_number);
if (SFE.contains(Name_number))
{
Log.d("TAG_LOG", "Зашло");
} else{
Log.d("TAG_LOG", "Не зашло");
}
}
В итоге, в логах пишется:
Name_1
Не зашло
Как правильно написать, чтобы мне выдавало в логах Зашло
и при этом иметь возможность изменять значение в скобках.
Для каждого Name_i
, где i=1,2...100 имеется один и тот же код. И чтобы
его не расписывать 100 раз, я как раз и решил использовать
String Name_number = "Name_" + String.valueOf(i);
Не надо путать имя переменной с её значением. В качестве ключа используется значение, то есть строка, которую Вы присваиваете переменной("TextName7"
) - именно она и записывается в SharedPreferences
.
То что Вы хотите должно выглядеть как-то так:
public static final String KEY_PREFIX = "Name_";
i = 1;
String nameNumber = KEY_PREFIX + i;
SharedPreferences.Editor editor = SFE.edit();
editor.putString(nameNumber, "Привет мир"));
editor.apply();
Log.d("TAG_LOG", nameNumber);
if (SFE.contains(nameNumber)) {
Log.d("TAG_LOG", "Зашло");
} else {
Log.d("TAG_LOG", "Не зашло");
}
Вы пытаетесь сложить строку с числом без явного приведения к строке. Попробуйте следующий вариант:
public static final String Name_1 = "TextName7";
private SharedPreferences SFE;
@Override
protected void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
SharedPreferences.Editor editor = SFE.edit();
editor.putString(Name_1, "Привет мир"));
editor.apply();
String Name_number = "Name_" + "1";
if (SFE.contains(Name_number))
{
Log.d("TAG_LOG", "Зашло")
} else{
Log.d("TAG_LOG", "Не зашло")
}
}
Здесь в строке
String Name_number = "Name_" + "1";
Происходит сложение строк и получается корректная строка для сравнения
Вы проверяете существует ли у вас в настройках поле Name1. И правильно он вам выводит "не зашло", потому что у вас такого поля нет. Вы создаете поле, название которого определяете через переменную Name1, значение которой - TextName7. Сделайте проверку
if (SFE.contains(TextName7))
и у вас выведет "Зашло"
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Хотел разобраться с push уведомлениямиНашел информацию, что нужно в builg
Появилась необходимость в текстовое окно установить датуметод showDialog(DIALOG_DATE) уже устарел