2017-08-31 225 views
3

以下方法正在工作,但現在它不會將我的整數寫入文件。共享首選項不工作,android?

public void writeChpNum(int num) { 
    SharedPreferences prefs = context.getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE); 
    prefs.edit().putInt("chapter", num).apply(); 
} 

,這是我從主類獲得:

SharedPreferences prefs = this.getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE); 
chapterNum = prefs.getInt("chapter", 1); 

方法並沒有在這種情況下工作:

writeChpNum(1); 
writeLastLine("0"); 

boolean deleted = file.delete(); 
boolean deleted2 = file2.delete(); 
boolean deleted3 = file3.delete(); 
boolean deleted4 = last.delete(); 
android.os.Process.killProcess(android.os.Process.myPid()); 
System.exit(1); 

在這裏,我要重新啓動一切退出,這樣我正在刪除文件,但對於章節,我只需編寫「1」章。但是,它沒有寫。

這是因爲我正在退出應用程序嗎?

+1

是其正確的它怎麼不工作?請顯示一些錯誤日誌。 –

+0

共享的pref是應用程序私人文件不能直接訪問 –

+0

是的,我在不同的類使用這種方法。它在MainActivity類中獲取整數,但它在另一個類中寫入整數。我只需要在一堂課中使用它嗎? –

回答

0

當你像這樣訪問它時,上下文對象在其他活動中將不可用。嘗試在方法中傳遞它的上下文,如果你想寫這個方法只有一個類。使方法靜態,所以你不需要創建活動對象。

編輯基於用於退出應用程序的新代碼

你需要commit(),而不是apply()

編號:https://developer.android.com/reference/android/content/SharedPreferences.Editor.html#apply()

public static void writeChpNum(Context c, int num) { 
    SharedPreferences prefs = c.getSharedPreferences("myPrefsKey", Context.MODE_PRIVATE); 
    prefs.edit().putInt("chapter", num).commit() ; 
} 
+0

我已經做了以下兩個(在同一個應用程序中):'getContext()。getSharedPreferences(「sample_name」,MODE_PRIVATE);''以及'SharedPreferences sPrefs = getSharedPreferences(「Sleepin」,MODE_PRIVATE);'都工作。第一個是在一個適配器中。第二個是它自己的活動。 – Michael

+0

是的,這個方法正在工作,但是,當我想寫整數並退出應用程序時,它沒有寫入。代碼在上面。 –

+0

您在調用apply()時正在退出應用程序,請使用commit()方法。應用程序異步工作,所以在後臺工作時稱爲退出。在完成寫入/失敗數據之後,commit()將進入下一行代碼 –