广播接收器和活动SharedPreferences不写入同一文件?

时间:2017-06-01 08:16:31

标签: android

我有一个广播接收器,一旦安装了应用程序就会从playstore接收引用者ID,然后应该写入一个文件,当用户第一次登录时会被发送到我的webservice,然后它会奖励引用者。

我面临的问题是,在活动中,当我尝试拉取值时,SharedPreferences总是返回null,但是在接收器上我通过在推动它之后直接拉动值来测试。

我尝试了什么。

getSharedPreferences("referral", MODE_PRIVATE);

PreferenceManager.getDefaultSharedPreferences(this);

getSharedPreferences(context.getPackageName() + "_preferences", MODE_PRIVATE);

然而,他们中没有人正在工作,而且此时不知道该怎么做,我也尝试了以下答案: getDefaultSharedPreferences in a BroadcastReceiver Shared preferences inside broadcastreceiver Android: using sharedPreferences in a broadcast receiver getDefaultSharedPreferences in a BroadcastReceiver 但不适用于我。

接收者

public class ReferralReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle extras = intent.getExtras();

        String referrerString = extras.getString("referrer");
        SharedPreferences sharedPref = context.getSharedPreferences("referral_pref", MODE_PRIVATE);
        sharedPref.edit().putString("referrer", referrerString).apply();
        Log.e("TEST", "Referrer is: " + referrerString + " | " + sharedPref.getString("referrer","null" +
                "") + " | " + context.getClass().getSimpleName());
    }
}

活动

String referrer = getSharedPreferences("referral_pref", MODE_PRIVATE).getString("referral", "null");
    Log.e("test", referrer + " was ref");

logcat

06-01 10:19:27.011 15963-15963 E/TEST: Referrer is: test | test | ReceiverRestrictedContext
06-01 10:19:32.906 15963-15963 E/test: null was ref

1 个答案:

答案 0 :(得分:0)

调用putString()时,你有一个名为" referrer"并且在调用getString()时,您的密钥名称是" referral"。

我建议您创建一个名为KEY_REFERRER = "referrer"的静态变量并将其用作 -

putString(KEY_REFERRER, refferString)

getString(KEY_REFERRER, "defaultValue")