2011-02-16 57 views
1

我使用下面的代碼:SharedPreferences.Editor.apply力關閉

SharedPreferences.Editor edit = mPrefs.edit(); 
edit.putString("UUID", UUID.randomUUID().toString()); 
edit.commit(); 
//edit.apply(); 

這工作得很好,但如果我註釋掉的承諾,並取消對應用,應用力我的設備上關閉,並沒有錯誤消息或拋出的異常。奇怪的是,這在2.2和2.3.3的模擬器中運行良好。它只在我運行的Nexus one上關閉2.2.1

我有上面的解決方法,但對結束的原因感興趣。

任何人都可以幫忙嗎?

乾杯,Venatu

+2

任何強制關閉意味着你有你的日誌中詳細的堆棧跟蹤。請張貼。 – EboMike

回答

4

apply()在API級9(又名,機器人2.3)中的溶液。不要試圖在Android 2.2上使用它。

+0

Doh!我不認爲這會很簡單。謝謝回覆 – Venatu

0

很簡單我用科德這樣的:

if (respondsTo(editor, "apply")) invoke(editor, "apply」); 
else editor.commit(); 

,然後我有這兩個神奇的方法爲靜態導入..

public static boolean respondsTo(Object object, String methodName) { 
    try { 
     object.getClass().getMethod(methodName, (Class<?>[]) null); 
     return Yes; 
    } catch (NoSuchMethodException e) { 
     return No; 
    } 
} 

public static Object invoke(Object object, String methodName) { 
    try { 
     return object.getClass().getMethod(methodName, (Class<?>[]) null).invoke(object); 
    } catch (Exception e) { 
     return INVOKE_FAILED; 
    } 
} 

提交運行,同時阻擋界面,因此可以問題,如果節省大量數據。我使用後臺線程提交(這是有問題的...),但現在很多用戶有2.3,所以我認爲老年人應該切換...