2012-05-20 42 views
4

我有一個問題,可能會更一般,但我碰到它在Android開發過程中:訪問常用函數static?

我怎樣才能最好地分享自己常用的方法? 例如,通過鍵檢索共享首選項始終是相同的代碼。但是,如果我有不同的片段或活動中使用它,我總是要複製相同的代碼:

private void setSharedPrefs(String key, String value) { 
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putString(key, value).commit(); 
} 

這是一個好習慣,使這個public static在GlobalUtils類左右? 你將如何處理這些功能?

回答

1

是的,你可以把它公共靜態:

public static void setSharedPrefs(Context context, String key, String value) { 
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context); 
    SharedPreferences.Editor editor = settings.edit(); 
    editor.putString(key, value).commit(); 
} 

在那裏你可以抓住的活動已經死亡後的背景下某些情況下小心,那是不好的。

您的描述

更可能的情況可能是創建這樣一個類:

public class MyPrefs { 

    SharedPreferences settings; 
    SharedPreferences.Editor editor; 


    public MyPrefs(Context context){ 
     settings = PreferenceManager.getDefaultSharedPreferences(context); 
     editor = settings.edit(); 
    } 

    public void saveName(String name){ 
      editor.putString("name", name).commit(); 
    } 

} 

你會延遲初始化這個類在你的類,它擴展應用,並有一個getter在那裏撿回來,用的東西像:

MyPrefs prefs = ((MyAppication) getContext().getApplicationContext()).getMyPrefs(); 

,並使用它,像這樣:

prefs.saveName("blundell"); 

EDIT

懶惰初始化的實施例:

private MyPrefs prefs; 

public MyPrefs getMyPrefs(){ 
    if(prefs == null){ 
      prefs = new MyPrefs(this); 
    } 
    return prefs; 
} 

N.B這是一個擴展因此Applicationthis是指應用程序的上下文,並且將活應用程序的持續時間的類內延遲初始化。如果你在哪裏使用Activity上下文,你不想使用懶惰初始化。 (因此使用應用程序上下文!

+0

這似乎很合適。但是,對於懶惰的init,你是什麼意思?我想我必須通過以下方式初始化:'MyPrefs prefs = new MyPrefs(context); ... prefs.saveName(..);' – membersound

+1

懶惰的init意味着你不會初始化這個實例直到你真的需要它。 – QuantumMechanic

+0

@membersound已更新以顯示延遲初始化 – Blundell

2

你絕對可以創建一個靜態類,如GlobalUtils,甚至可以爲SharedPreferences創建一個專用類。您只需要將Context傳遞給該方法,以便您可以獲取SharedPreferences對象。你可以把它放在你需要的地方;我讓這些課程無數次。我甚至有一個線程安全SharedPreferences包裝:-)

編輯:只是看着我的代碼再和我SharedPreference包裝的一半是靜態的,其餘的都懶洋洋地實例化。這就是說,我認爲只要你的代碼的其他部分不需要以某種方式進行,你應該選擇你感覺舒服的方式。

+1

警告:如果濫用,這可能是代碼異味。嘗試儘可能多地保留這些東西,而不是傾倒所有東西,廚房也會陷入「實用」階層。 –

+0

我喜歡讓我的utils類保持獨立,即使它們只有少數,它們非常小,但有些人如果足夠小就喜歡有一個「GlobalUtils」類 – Eliezer

0

我通常在一個不同的類中編寫一個靜態方法中的公共代碼。這樣我就可以在項目中的任何地方調用靜態方法,而無需每次創建新的類對象。