2012-08-23 30 views
0

這段代碼似乎對所有事情都很好,除了我在Froyo上模擬它時。我沒有運行Froyo的實際設備,所以我無法在實際的設備上測試它,但是它在達到提交時的FC狀態。我甚至在try塊中有代碼,所以我會認爲它應該捕獲異常而不是強制關閉。Android SharedPreferences在Froyo上強制關閉提交

private void getPrefs() { 

    boolean dockRespond; 
    boolean carDockRespond; 
    boolean silenceRinger; 

    settings = getSharedPreferences(PREFS_NAME, 0); 
    editor = settings.edit(); 

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

    dockRespond = prefs.getBoolean("dockRespond", true); 
    carDockRespond = prefs.getBoolean("carDockRespond", true); 
    silenceRinger = prefs.getBoolean("silenceRinger", false); 

    Intent startDock = new Intent(this, DockService.class); 

    if(dockRespond) 
    { 
     //start dock listener service 
     startService(startDock); 
    } 
    else 
    { 
     //stop dock listener service 
     stopService(startDock); 
    } 

    try 
    { 
     editor.putBoolean(DOCKRESPONSEGLOBAL, dockRespond); 
     editor.putBoolean(CARDOCKRESPONSEGLOBAL, carDockRespond); 
     editor.putBoolean(SILENCERINGER, silenceRinger); 
     editor.commit(); 
    } 
    catch (Exception e) 
    { 
     Log.d("Exception caught: ", e.getMessage()); 
    } 
} 

所有的常量(全部大寫)的上面在常量區定義,正如我之前所說的,代碼似乎在除了Froyo的任何操作系統版本。在froyo FC上的「editor.commit();」線。

有什麼建議嗎?

+0

你能發佈你的stacktrace嗎? – Shaun

+0

使用editor.apply()代替editor.commit(); –

+0

@SunnyKumarAditya editor.apply()似乎不存在。 – Randy

回答

0

我想通了。發生了什麼事情是我讓自己陷入無盡的循環。我只好:

settings.unregisterOnSharedPreferenceChangeListener(prefsListener); 

讓我修改,然後

settings.registerOnSharedPreferenceChangeListener(prefsListener); 

不知道爲什麼,只有在升級Froyo所造成的問題。 Google必須對操作系統進行更改以防止在未來版本中出現這種情況。

0

我沒有看到你的代碼中的任何地方,你定義了什麼編輯器?的第一行代碼有編輯器是

editor = settings.edit(); 

,但你從來沒有定義什麼「編輯」是

+0

「settings」中找到的所有紅色文本和「編輯器」都在上面定義,在全球範圍內,然後在這裏分配一個值。我實際上也在onCreate中分配了這個值,但是我想在這裏試着去看看它是否有幫助。 這是他們的定義: SharedPreferences設置; SharedPreferences.Editor編輯器; – Randy