Почему выдаёт ошибку java.lang.StringIndexOutOfBoundsException: length=0; index=0?

153
24 сентября 2019, 14:20

У меня есть две картинки, они кликабельные, нажимая на эти картинки, я меняю цвет Action Bar. Но один код работает отлично, другой абсолютно такой же , но немного с другими названиями не работает.

1 КОД

sharedPreferences = getSharedPreferences("ShaPreferences", Context.MODE_PRIVATE);
final SharedPreferences sharedPreferences = getSharedPreferences("ShaPreferences", Context.MODE_PRIVATE);
String hexColor = sharedPreferences.getString("toolbarColor", "");
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor(hexColor)));
pinkcolor.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String hexColor = "#eca190";
            getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor(hexColor)));
            SharedPreferences.Editor editor=sharedPreferences.edit();
            editor.putString("toolbarColor",hexColor);
            editor.commit();
        }
});

2 КОД

sharedPreferences1 = getSharedPreferences("ShaPreferences1", Context.MODE_PRIVATE);
final SharedPreferences sharedPreferences1 = getSharedPreferences("ShaPreferences1", Context.MODE_PRIVATE);
String hexColor1 = sharedPreferences1.getString("toolbar", "");
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor(hexColor1)));

greencolor.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String hexColor1 = "#8bc34a";
                getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor(hexColor1)));
                SharedPreferences.Editor editor1=sharedPreferences1.edit();
                editor1.putString("toolbar",hexColor1);
                editor1.commit();
            }
        });

Ошибку выдает на:

 getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor(hexColor1)));

Сама ошибка:

Caused by: java.lang.StringIndexOutOfBoundsException: length=0; index=0

Answer 1

Вам надо отработать ситуацию когда цвет еще не сохранен в настройках.

Вместо:

String hexColor = sharedPreferences.getString("toolbarColor", "");
String hexColor1 = sharedPreferences1.getString("toolbar", "");

Сделайте так:

String hexColor = sharedPreferences.getString("toolbarColor", "#eca190");
String hexColor1 = sharedPreferences1.getString("toolbar", "#8bc34a");

Это означает, что если toolbarColor или toolbar будут пустыми, то в переменные попадет значение которое вы задали по умолчанию

sharedPreferences.getString("toolbarColor", "ваше значение по умолчанию если toolbarColor пустой")
sharedPreferences1.getString("toolbar", "ваше значение по умолчанию если toolbar пустой")

Пояснение почему "первый код" работает а второй - нет: в первом случае вы сначала реализовали сохранение параметра, а потом добавили установку цвета. Во втором случае вы скопировали "первый код" но новая переменная toolbar пустая, потому что вы еще не сохранили её в настройки, но уже пытаетесь её загрузить, перевести в цвет и установить цвет.

Дополнительно. Вам нужно менять цвет тулбара из разных картинок. Значит у вас должна быть одна переменная, пусть будет toolbarColor, и единое имя общих настроек ShaPreferences

final SharedPreferences sharedPreferences = getSharedPreferences("ShaPreferences", Context.MODE_PRIVATE);
String hexColor = sharedPreferences.getString("toolbarColor", "#eca190"); // <-- по умолчанию розовый цвет
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor(hexColor)));
pinkcolor.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String hexColor = "#eca190";
            getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor(hexColor)));
            SharedPreferences.Editor editor=sharedPreferences.edit();
            editor.putString("toolbarColor",hexColor);
            editor.commit();
        }
});
greencolor.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String hexColor1 = "#8bc34a";
                getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor(hexColor1)));
                SharedPreferences.Editor editor1=sharedPreferences1.edit();
                editor1.putString("toolbarColor",hexColor1);
                editor1.commit();
            }
        });
READ ALSO
java.lang.IllegalStateException: Duplicate key

java.lang.IllegalStateException: Duplicate key

Я разрабатываю игровое дополнение для Minecraft и столкнулся со следующей проблемойКогда я выполняю команду на добавление клана, то происходит...

193
Как исправить ошибку подключения к PostgreSQL из Inellij IDEA

Как исправить ошибку подключения к PostgreSQL из Inellij IDEA

Пытаюсь подключиться к БДjar файл подключил как библиотеку

212
Как привязать url фото профиля?

Как привязать url фото профиля?

Как привязать url фото профиля из Storage и юзера чата с этим фото из Database в одном адаптере?

208
Как вывести в одну строку показание введенного времени через двоеточие

Как вывести в одну строку показание введенного времени через двоеточие

Банальнейший вопрос, но не могу найти на него ответВводим числа, что будут являться часами, минутами и секундами, как вывести в одну строку...

159