2013-01-08 43 views
0

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

主营:

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

编辑不给任何错误,但我得到的运行时错误。请协助我解决它们。

+1

告诉我们您的logcat的...... “我的英语对不起” 嘿嘿没有problem..try 'if(functions.Sonido(this)){mSound.play(); }' –

回答

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

另请检查上下文是否正确发送。通常你可以使用this.getApplicationContext()发送当前的上下文,如果你在一个活动/片段

+0

'valor ==“YES”'在任何情况下都不能产生'NullPointerException' –

+0

这也是比较字符串的错误方法。你应该使用.equals(),它可以抛出一个NullPointerException,尽管你可以这样做:“YES”.equals(valor)'来避免这种情况。 – kcoppock

+0

道歉,你是对的 – SalGad

3

为什么这么复杂?

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

因为你的错误日志(在类型函数的方法SONIDO(上下文)不适用于参数(新TiledSprite(){}))你必须调用SONIDO这样的:

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

如果它没有工作向我们展示您的日志在ddms。

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

if (valor == "YES") 

更好这个喜欢:

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

,甚至更好的像这样'if(“YES”.equals(valor))' –

+0

编辑及时。在他的情况是的。 –

+0

我把“这个”,这是错误。 “类型函数中的方法Sonido(Context)不适用于参数(new TiledSprite(){})”。这= TiledSprite。上下文完成的“名称”。对不起,我再次enlgish和对不起,因为即时通讯新手在java – user1959076