1

我希望你能帮助我 :) 我想从 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

那为什么不满足这个条件??

4

6 回答 6

3

比较String使用equals()

if (filePath.equals("default"))

阅读内容以获取更多信息。

==比较引用,而不是值。在您的情况下,您要检查值相等,而不是引用相等。

于 2012-06-18T12:59:15.110 回答
2

尝试

filePath.equals("default")

代替

if (filePath == "default")
于 2012-06-18T12:59:51.073 回答
2

==检查引用是否相同。

.equals检查值

于 2012-06-18T13:00:58.057 回答
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

比较相等的值。因为此方法是在 Object 类中定义的,所有其他类都从该类派生,所以它会自动为每个类定义。但是,除非该类覆盖它,否则它不会对大多数类执行智能比较。对于大多数 Java 核心类,它已经以一种有意义的方式定义。如果它没有为(用户)类定义,它的行为与 == 相同。

于 2012-06-18T13:02:35.247 回答
0

如果 filePath 为 null,则使用它来避免 NullPointerException

if ("default".equals(filePath ))
于 2012-06-18T13:02:19.383 回答
0

试试这个

if (filePath.equals("default"))
于 2012-06-18T13:04:21.537 回答