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

これを試して

if (filePath.equals("default"))
于 2012-06-18T13:04:21.537 に答える
0

これを使用して、filePath が null の場合に NullPointerException を回避します

if ("default".equals(filePath ))
于 2012-06-18T13:02:19.383 に答える