2012-06-18 2 views
1

당신이 나를 도울 수 있기를 바랍니다 :) sharedpreferences에서 글꼴 파일 경로의 문자열을 얻고 싶습니다. 그리고 자산에 기본 글꼴을로드하는 문자열이 없으면 좋습니다. 적인 filePath = 기본,하지만 프로그램이 항상 "다른"내부의 순서를 실행하는 경우이 조건이 만족스럽지 않은 이유는 무엇입니까?

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)); 
    } 

당신이 볼 수있는이 프로그램은 기본 글꼴을로드 할 것입니다 : 내가, 조건을 stablish하려고 여기 볼 때 문제는 온다. ..

로그를 만들 순서가 명확하게 표시됩니다. 선택한 글꼴 : 기본값. 왜냐하면 나는 결코 putString을 가지고 있지 않다.

그래서이 조건이 만족스럽지 않은 이유는 무엇입니까 ??

+0

봐 시도 (http://stackoverflow.com/q/513832/1285418) 당신을 도울 수 있습니다. –

답변

3

자세한 내용은 equals()

if (filePath.equals("default")) 

읽기 this를 사용하여 String 비교.

==은 값이 아닌 참조를 비교합니다. 귀하의 경우, 당신은 가치 평등이 아닌 참조 평등을 확인하고 싶습니다. 참조가 동일한 경우

+0

오, 감사합니다! – BamsBamx

+0

환영합니다. :-) –

+0

나는 투표했습니다, 당신은 그것을받을 자격이 있습니다 :) – BamsBamx

2

filePath.equals("default") 

대신

if (filePath == "default") 
2

== 확인하려고.

.equals 체크 값

0

사용이적인 filePath가 null의 경우, NullPointerException가 피할 수

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

원하는 동작이 있다면 어떨까요? – dacwe

+0

당신이하고 싶은 일에 달려 있습니다. NPE를 항상 피하고 싶다면 참조가 null 일 수 있고 논리의 일부인 일반적인 구조를 사용하고 예외를 잡을 수 있다면이 구조를 사용해야합니다. –

+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

평등에 대한 값을 비교합니다. 이 메서드는 Object 클래스에 정의되어 있으므로 다른 클래스는 모두 파생되므로 모든 클래스에 대해 이 자동으로 정의됩니다. 그러나 클래스가 대체하지 않는 한 대부분의 클래스에 대해 지능적인 비교를 수행하지 않습니다. 대부분의 Java 핵심 클래스에서 의미있는 방식으로 정의되었습니다. (사용자) 클래스에 정의되어 있지 않으면 ==와 동일하게 동작합니다.

0

은 [이]에서이

if (filePath.equals("default")) 
관련 문제