2012-06-18 54 views
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)); 
    } 

,你可以看到,该程序将加载默认字体,如果文件路径=默认值,但该计划一直执行里面的“其他人”的顺序。 ..

使日志出现的顺序显示清楚:选择字体:默认。因为我从来没有把弦

所以为什么这个条件不满意?

+0

看(http://stackoverflow.com/q/513832/1285418)可以帮助你。 –

回答

3

使用equals()

if (filePath.equals("default")) 

阅读this以获取更多信息比较String

==比较参考,而不是值。在你的情况下,你想检查值相等,而不是参考相等。

+0

Oww它的工作,谢谢! – BamsBamx

+0

欢迎您。 :-) –

+0

我已经投票了,你应得的:) – BamsBamx

2

尝试

filePath.equals("default") 

,而不是

if (filePath == "default") 
2

==检查引用是相同的。

.equals校验值

0

利用这一点避免NullPointerException - 如果文件路径为null

if ("default".equals(filePath)) 
+1

如果这是所需的行为呢? – dacwe

+0

这取决于你想要做什么。如果你想永远避免NPE,你应该使用这种结构,如果你的引用可以为空,这是你的逻辑的一部分,你可以使用通常的构造和捕获异常。 –

+0

OP:'filePath = new String(....)' – dacwe

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核心类,它已经以有意义的方式进行了定义。如果 它没有为(用户)类定义,它的行为与==相同。

0

尝试[这]这个

if (filePath.equals("default"))