0

AndroidでAndengineを使用しています。以下に示す 2 つのクラス (メインと関数) があります。

主要:

private Context myContext;
.
.
if (functions.Sonido(myContext)) {
   mSound.play();
}

機能:

    public boolean Sonido(Context C) {
    prefs =  C.getSharedPreferences(Filename, Context.MODE_PRIVATE);
    valor = prefs.getString("Sound", null);

    if (valor == "YES") {
        return true;
    }else{
        return false;
    }
    }

エディターではエラーは発生しませんが、実行時エラーが発生します。それらを解決するために私を助けてください。

4

2 に答える 2

3

なぜそんなに複雑なのですか?

public boolean Sonido(Context context) {
    prefs =  context.getSharedPreferences(Filename, Context.MODE_PRIVATE);
    return prefs.getBoolean("Sound", false);;
}

エラー ログ (型関数のメソッドSonido(Context) は引数(new TiledSprite(){})には適用されません) のため、次のように Sonido を呼び出す必要があります。

if (functions.Sonido(MainActivity.this)) {
   mSound.play();
}

機能しない場合は、ddms で logcat を表示してください。

別のこと:次のような文字列と一致しないでください:

if (valor == "YES")

より良いこのような:

if (valor.equals("YES")) /*OR in your case*/ "YES".equals(valor)
于 2013-01-08T18:36:18.190 に答える
1

デフォルトの SharedPreferences 値であるため、valor が null でないかどうかのチェックを追加する必要があります。関数コードを次のように変更してみてください。

public boolean Sonido(Context C) {
prefs =  C.getSharedPreferences(Filename, Context.MODE_PRIVATE);
valor = prefs.getString("Sound", null);

if (valor != null){
    if (valor.equals("YES")) {
        return true;
    }else{
        return false;
    }
} else {
return false;
}
}

また、コンテキストが正しく送信されているかどうかも確認してください。通常、アクティビティ/フラグメントにいる場合は、 this.getApplicationContext() を使用して現在のコンテキストを送信できます

于 2013-01-08T18:34:02.473 に答える