2017-06-23 81 views
-1

私はクラスAを持っていますこのクラスは他のクラスを拡張または実装していません。私はクラスBを持っていますが、このクラスは他のクラスを拡張したり実装したりしません。SharedPreferencesを初期化できません

私のクラスBを単独SharedPreferencesを管理するために使用されます。ここでは

private static SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext); 

はクラスBで問題方法です:

public static void setCurrentUsersEmail(String email){ 
    sharedPreferences.edit().putString("userEmail",email).commit(); 
} 

今クラスAは、データベース・マネージャであるとユーザーを格納する必要があります後で使用するためにSharedPreferencesにメールしてください。

java.lang.ExceptionInInitializerError at com.test.Android.MySharedPrefs.setCurrentUsersEmail(MySharedPrefs.java:0)

私はこれは私couldn起こる理由としては本当に混乱しています:私はエラーを取得するクラスAのコードを実行しようとすると、しかし `

MySharedPrefs.setCurrentUsersEmail(currentUsersEmail); 

:私は、次のコードでこれを行いますどちらか一方を検索した後で解決策を見つけることができません。他のアクティビティでsharedPreferencesクラスを使用しています。それは活動上の問題ですか?

ご迷惑をおかけして申し訳ありません。

+0

() 'メソッド – Aryan

+0

だから私は、 'setCurrentUsersEmail(currentUsersEmail)'をrecyclerviewアダプタから呼び出します。これは、データベースがチェックされ、次にSharedPreferencesが呼び出されるクラスAに移動します。 sharedPreferencesが最初に作成されるとき、私はMainActivityのメソッドを呼び出してコンテキストデータを取得します。私はコンテキストがこのインスタンスで送信されているとは思わない – memoryManagers

答えて

0

あなたはあなたの条件のためにシングルトンを使用することができます。

public class MyPrefs { 

    private static MyPrefs myPrefs; 
    private SharedPreferences sharedPreferences; 

    private MyPrefs(Context context){ 

     sharedPreferences=context.getSharedPreferences("MyPREFERENCES", Context.MODE_PRIVATE); 
    } 

    public static MyPrefs getInstance(Context context){ 

     if(myPrefs==null) 
      myPrefs=new MyPrefs(context); 
     return myPrefs; 
    } 

    public void setCurrentUsersEmail(String email){ 

     sharedPreferences.edit().putString("userEmail",email).commit(); 
    } 
} 

あなたは、このように電子メールを置くことができます。

MyPrefs.getInstance(context).setCurrentUsersEmail(currentUsersEmail); 

あなたのクラスでsharedPreferencesの参考のために最初の時にコンテキストを渡す必要があります。

またはアクティビティの呼び出しから

MyPrefs.getInstance(context)一度次にあなたがコンテキストなしで呼び出すことができます

MyPrefs.getInstance().setCurrentUsersEmail(currentUsersEmail); 

getInstance()方法:あなたがgetDefaultSharedPreferences `内側` mContext`を渡す方法

public static MyPrefs getInstance(){ 

     if(myPrefs==null) throw new AssertionError("MyPrefs cannot be null"); 
     else 
     return myPrefs; 
} 
+1

これはありがとうございました。このインスタンスのmainActivityからsharedPreferencesを取得できない理由を説明してください。 – memoryManagers

+0

静的変数の最初のものは静的ブロックで初期化する必要があります。** PreferenceManager ** - >アクティビティまたはXMLからのプリファレンス階層の作成に役立ちます。** SharedPreferences ** - > getSharedPreferences(String 、int)。特定のプリファレンスセットに対して、すべてのクライアントが共有するこのクラスの単一のインスタンスが存在します。 – Aryan

+0

'PreferenceManager'は通常、PreferenceActivityを作成したり、デフォルト値でアプリケーションの.xmlファイルからいくつかのプリファレンスをロードしたり、SharedPreferencesを参照する独自のものを保持する場合に使用します。 – Aryan

0

あなたがこれを行うことができ、任意の活動で、新しいメソッドを作成する必要がいけない:保存するには

を:

SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit(); 
editor.putString("email", "[email protected]"); 
editor.commit(); 

を復元するには:

SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
String restoredText = prefs.getString("email", null); 

あなたはMyPrefsを呼び出し傾けます。 aFunctionYouCreated()!!!

関連する問題