2012-04-11 7 views
0

私はSharedPreference.getBooleanで本当に不満な問題を抱えています。次のスニペットを参照してください。SharedPreferences.getBoolean馬鹿馬鹿しい例外を投げる

Map<String, ?> all = preferences.getAll(); 

Object x = all.get("EnableMedia"); 

boolean v = preferences.getBoolean("EnableMedia", (Boolean) null); 

「x」はブール値であり、trueです。

ただし、次の行preferences.getBooleanを実行すると、例外がスローされます。何を与えるか?この呼び出しで

+0

それはあなたが当然の権利です –

+0

をお読みください...例外を見ずに知ることは難しいです。これで問題は解決しました。しかし、このクラスはまだ私に完全に破られているようです。マップに明らかに異なるエントリがあっても、常にdefValueに渡す値を返します。私はマップ内の整数についても同様の動作を見ています。 –

答えて

4

ルック:それはboolean値ではなく、Boolean値だと

public abstract boolean getBoolean (String key, boolean defValue) 

注:

preferences.getBoolean("EnableMedia", (Boolean) null); 

今すぐgetBooleanの署名を見てください。だから、実際に何が起こっているあなたのコードは次のようなものです:あなたがnull参照のメソッドを呼び出しているとして、NullPointerExceptionがスローされます

Boolean tmp = null; 
preferences.getBoolean("EnableMedia", tmp.booleanValue()); 

有効なbooleanの値を渡す必要があります。

preferences.getBoolean("EnableMedia", true); 
+0

をゼロにするためにプリミティブ型(boolean)を設定することはできませんhttp://tinyurl.com/so-hints – dsharlet

+2

@dsharlet:「ばかばかしい」という完璧な合理的な例外の以前の分析を考えれば、私はあなたの診断の感覚を特に信頼したくはありません。 'contains'を呼び出すとどうなりますか? –

+0

FYI、そのブールキャストはEclipseによって自動的に生成されたので、それは左のフィールドから大きく外れているとは言えません。とにかく、私はこの問題を解決したと思います。ご協力いただきありがとうございます。 – dsharlet

関連する問題