0

我在 Android 上使用 Andengine。我有两个类(主要和函数),如下所示。

主要的:

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

您需要检查 valor 是否不为空,因为这是默认的 SharedPreferences 值。尝试将您的功能代码修改为:

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

还要检查上下文是否正确发送。如果您在 Activity/Fragment 中,通常可以使用 this.getApplicationContext() 发送当前上下文

于 2013-01-08T18:34:02.473 回答