Имеется вот такой код:
...
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))
и у вас выведет "Зашло"
Сборка персонального компьютера от Artline: умный выбор для современных пользователей