я надеюсь, что вы можете мне помочь :) Я хочу получить строку пути файла шрифта из sharedpreferences, и если нет какой-либо строковой загрузки шрифта по умолчанию в активах, хорошо. проблема возникает, когда я пытаюсь стабилизировать состояние, см. здесь:
String filePath = new String(preferences.getString(String.valueOf(v.getId()+"font"),"default"));
Log.d("","choosed font: "+filePath);
if (filePath == "default"){
v.setTypeface((Typeface.createFromAsset(getAssets(),"fonts/Default.ttf")),preferencias.getInt(String.valueOf(v.getId()+"style"), 0));
}else{
v.setTypeface(Typeface.createFromFile(filePath),preferencias.getInt(String.valueOf(v.getId()+"style"), 0));
}
как вы можете видеть, программа загрузила шрифт по умолчанию, если filePath = default, но программа всегда выполняет порядок внутри "else"...
порядок отображения журнала отображается четко: выбранный шрифт: по умолчанию. потому что я никогда не putString
так почему это условие не удовлетворено??
Сравнить String
с помощью equals()
if (filePath.equals("default"))
Прочтите это для получения дополнительной информации.
==
сравнивает ссылки, а не значения. В вашем случае вы хотите проверить равенство значений, а не ссылочное равенство.
==
проверяет, является ли ссылка одинаковой.
.equals
проверить значение
пытаться
filePath.equals("default")
вместо
if (filePath == "default")
Не просто используйте это:
Это сравнивает ссылки, а не значения!
if (filePath == "default")
всегда используйте equals(...)
для Strings!
if (filePath.equals("default"))
Исправленная версия вашего кода:
String filePath = new String(preferences.getString(String.valueOf(v.getId()+"font"),"default"));
Log.d("","choosed font: "+filePath);
if (filePath.equals("default")){
v.setTypeface((Typeface.createFromAsset(getAssets(),"fonts/Default.ttf")),preferencias.getInt(String.valueOf(v.getId()+"style"), 0));
}else{
v.setTypeface(Typeface.createFromFile(filePath),preferencias.getInt(String.valueOf(v.getId()+"style"), 0));
}
Объяснение: http://leepoint.net/notes-java/data/expressions/22compareobjects.html
Сравнивает значения для равенства. Поскольку этот метод определен в классе Object, из которого выведены все остальные классы, он автоматически определяется для каждого класса. Тем не менее, он не выполняет интеллектуальное сравнение для большинства классов, если класс не переопределяет его. Он был определен значимым образом для большинства базовых классов Java. Если он не определен для (пользовательского) класса, он ведет себя так же, как ==.
используйте это, чтобы избежать NullPointerException, если filePath имеет значение null
if ("default".equals(filePath ))
попробуй это
if (filePath.equals("default"))