2012-10-17 81 views
0

您好,感謝您的閱讀。(Android)使用SharedPreferences寫入/讀取非活動類時出錯

我想採用OOP方法來使用SharedPreferences來保存和檢索我正在工作的Android應用程序中的數據。我相信下面的代碼是正確的,因爲它直接在非OOP莊園中使用時可以在Java類中工作。然而,在我所做的這個SharedPref類中,我在MODE_PRIVATE的Eclipse中出現了一個錯誤,我找不到原因。謝謝。

import android.content.Context; 
import android.content.SharedPreferences; 
import android.preference.PreferenceManager; 

public class SharedPref { 

    public static String File = "DPFile"; 

    public static void saveToSP(String key, String value) { 
     SharedPreferences saveData = getSharedPreferences(File, MODE_PRIVATE); 
     SharedPreferences.Editor editor = saveData.edit(); 
     editor.putString(key, value); 
     editor.commit(); 
    } 


    public static String getSavedData(String key) { 
     SharedPreferences preferences = getSharedPreferences(File, MODE_PRIVATE); 
     return preferences.getString(key, null); 
    } 
} 

此外,如果我延伸Activity類getSharedPreferences變得與錯誤的行和下面的消息:

「不能使靜態參考非靜態方法getSharedPreferences(字符串,整數)從類型ContextWrapper」

回答

4

可能是解決這個問題的最簡單的方法是將上下文傳遞到您的兩種方法,並讓它看起來像這樣:

public static void saveToSP(Context context, String key, String value) { 
    SharedPreferences saveData = context.getSharedPreferences(File, Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = saveData.edit(); 
    editor.putString(key, value); 
    editor.commit(); 
} 
+0

感謝您的回覆。你能詳細說明什麼是背景嗎?在保存數據時,我應該儘可能發送上下文? getSavedData會保持不變嗎? –

+0

該文檔將其稱爲「有關應用程序環境的全局信息的接口」。基本上它是Android系統管理的入口點。你也需要修改getSavedData,但你應該可以很容易地做到這一點給我的例子:) – theelfismike

+0

我想我可以管理修改getSavedData方法,但一個例子,你會傳遞作爲上下文將非常有用。再次感謝。 –

0

使用Context.MODE_PRIVATE。它不是一個活動,所以你必須從上下文中檢索它。