2013-12-07 101 views
1

我正在構建一個包含SharedPreferences的Android項目。SharedPreferences在android程序中產生強制關閉

我的SharedPreferences工作正常,我在多項活動中測試它。但是在我爲全局變量定義的類中,定義SharedPreferences將導致關閉力(日食沒有在代碼中顯示任何錯誤)。

public class Globals extends Application { 

    final SharedPreferences s = getSharedPreferences("Prefs", MODE_PRIVATE); 

} 

什麼問題?

+1

SharedPreferences只能從上下文來獲得。所以它需要'context.getSharedPreferences(「Prefs」,Context.MODE_PRIVATE);'你的類對Context沒有任何的瞭解 - 這是問題。您需要在方法中或通過構造函數傳遞Context變量作爲參數。 – Sajmon

+0

我改變了它:final SharedPreferences s = this.getSharedPreferences(「Prefs」,MODE_PRIVATE);但仍然產量逼近。 – user3077909

+0

你不能使用這個,因爲你不在活動(活動從Context延伸出於這個原因,你可以使用或不)。您需要顯式傳遞Context作爲參數或方法或構造函數。沒有其他方式如何做到這一點。 – Sajmon

回答

1

您應該通過Context,並使用

SharedPreferences prefs = Context.getSharedPreferences( "Prefs", Context.MODE_PRIVATE);

0

創建一個構造函數,並通過上下文變量作爲參數。任何想要使用此偏好的活動都必須通過活動。下面是代碼如下:

public class Globals extends Application { 

    private Context context; 

    public Globals (Context context) { 
     this.context = context; 
    } 

    SharedPreferences myPref = context.getSharedPreferences("Prefs", Context.MODE_PRIVATE); 
} 
0

你不能在實際的類中運行getSharedPreferences()。您所做的一切必須在應用程序的onCreate方法中。如果你嘗試在課堂上運行它,它會失敗,因爲它還沒有被初始化。將它看作一種活動,因爲活動和應用程序都有一個生命週期。

嘗試以下方法:

public class Globals extends Application { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     final SharedPreferences s = getSharedPreferences("Prefs", MODE_PRIVATE); 
    } 
}