2013-01-08 46 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