複数のアクティビティから値にアクセスするために、静的な共有設定を保持しています。
これで、特定の時間にアラームが鳴るように設定しました。その Broadcast Receiver で、共有設定変数にアクセスしようとしています。
すでに別のアクティビティで初期化されており、そこで適切な値を返します。
しかし、このブロードキャスト レシーバーでは、実際の値は得られません。初期化されていない値を提供します。
それは静的なので、値は同じままであるべきではありませんか?
これが共有設定クラスです。
package com.footballalarm.invincibles;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.util.Log;
public class SessionManagement {
// Shared Preferences
public static SharedPreferences pref;
// Editor for Shared preferences
public static Editor editor;
// Context
Context _context;
// Shared pref mode
int PRIVATE_MODE = 0;
// Shared pref file name
private static final String PREF_NAME = "invincibles_alarm";
// All Shared Preferences Key
public static final String PREF_MATCH = "match";
// Constructor
public SessionManagement(Context context){
this._context = context;
pref = _context.getSharedPreferences(getPrefName(), PRIVATE_MODE);
editor = pref.edit();
editor.commit();
Log.e("Pref Match Value-constructor for pref", getValueMatch());
}
public static void fillValues(String match){
try{// Storing login value as TRUE
editor.putString(PREF_MATCH, match);
// commit changes
editor.commit();
Log.e("Pref Match Value-in fill values", getValueMatch());
}
catch(Exception e)
{Log.e("fillValues", e.toString());}
}
public static String getValueMatch(){
return pref.getString(PREF_MATCH, "Loading Match");
}
public static String getPrefName() {
return PREF_NAME;
}
}
他のアクティビティで出力をログに記録しようとしましたが、正しく返されます。
アプリを実行し、アラームが発生する前に閉じると、ブロードキャスト レシーバーが共有設定にアクセスできないため、プログラムがヌル ポインター例外でクラッシュします。
この解決策を試しました - BroadcastReceiver の SharedPreferences が更新されないようです。しかし、受信者のマニフェストでは名前のみを使用しています。
これは、最小化メニューを使用して ICS でアプリを閉じた場合にのみ発生します。