我在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;
}
}
编辑器没有给出任何错误,但是我遇到了运行时错误。请帮我解决。
答案 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()发送当前上下文