Android上的Context和GetSharedPreferences

时间:2013-01-08 18:28:14

标签: android andengine android-context

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

主:

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

编辑器没有给出任何错误,但是我遇到了运行时错误。请帮我解决。

2 个答案:

答案 0 :(得分:3)

为什么这么复杂?

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

由于你的错误日志(类型函数中的方法 Sonido(Context)不适用于参数(new TiledSprite(){}))你必须像这样调用Sonido:< / p>

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

如果它不起作用,请在ddms中显示你的logcat。

另一件事: 不要匹配这样的字符串:

if (valor == "YES")

更好的是:

if (valor.equals("YES")) /*OR in your case*/ "YES".equals(valor)

答案 1 :(得分:1)

如果valor不为null,则需要添加一个检查,因为这是默认的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()发送当前上下文