0

複数のアクティビティから値にアクセスするために、静的な共有設定を保持しています。

これで、特定の時間にアラームが鳴るように設定しました。その 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 でアプリを閉じた場合にのみ発生します。

4

1 に答える 1