我希望你能帮助我:) 我想从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
那为什么这个条件不满意?
答案 0 :(得分:3)
答案 1 :(得分:2)
尝试
filePath.equals("default")
而不是
if (filePath == "default")
答案 2 :(得分:2)
==
检查引用是否相同。
.equals
检查值
答案 3 :(得分:1)
不要只使用它:
这会比较引用,而不是值!
if (filePath == "default")
始终使用equals(...)
表示字符串!
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
比较相等的值。因为这个方法是在 对象类,派生所有其他类,它是 为每个班级自动定义。但是,它没有执行 大多数班级的智能比较,除非班级覆盖它。 对于大多数Java核心类,它已经以有意义的方式定义。如果 它没有为(用户)类定义,它的行为与==。
相同
答案 4 :(得分:0)
如果filePath为null,则使用此选项来避免NullPointerException
if ("default".equals(filePath ))
答案 5 :(得分:0)
试试这个
if (filePath.equals("default"))