【发布时间】:2014-03-01 13:36:34
【问题描述】:
(与我刚刚发布的另一个问题略有不同,如果违反规则,请道歉)
在我的活动1中,我正在设置一些共享偏好,接下来我通过一个意图启动另一个活动2,并从sharedpreferences设置一些文本视图......这一切都很好。
这是我的问题。
在我的第一个活动 1 中,我有一个带有待处理意图的 alarmmanger,这个待处理意图是用于锁定手机的广播接收器,然后启动活动 2。此活动与上面提到的第二个活动相同。然而,当这个活动从broadcastreceiver 开始时,没有一个文本视图是从sharedpreferences 加载的。这只发生在从 broadcastreceiver 启动 activity2 时。
SharedPreference 在活动一中设置为
SharedPreferences lockPreferences = getSharedPreferences("lockprefs", Context.MODE_PRIVATE);
在activity2中的访问方式相同
SharedPreferences lockPreferences = getSharedPreferences("lockprefs", Context.MODE_PRIVATE);
然后我可以得到字符串等
当从广播接收器启动activity2时,没有加载任何sharedprefs。
broadcastreceiver 位于不同的包名中,我将其移动到与活动相同的包中进行测试,但没有区别。
它快把我逼疯了,请帮忙! 谢谢
编辑
我有一个 GCMIntentService,这是我设置共享首选项的地方(基于从 GCM 收到的值)(我只包含了相关代码)
public class GcmIntentService extends IntentService {
public static final String PREFERENCE_NAME = "lockPreference";
@Override
protected void onHandleIntent(Intent intent) {
SharedPreferences lockPreference = getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor lockPrefsEditor;
lockPrefsEditor = lockPreference.edit();
lockPrefsEditor.putString("newpassword", newpassword);
lockPrefsEditor.commit();
现在如果我启动 activity2 ,共享首选项会被正确读取。 但是,当尝试先从广播接收器访问时,它不起作用。
这是一个测试接收者:
package com.myapp;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.util.Log;
import android.widget.Toast;
public class test extends BroadcastReceiver {
public static final String TAG = "myapp";
public static String newpassword = "";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG,"test receiver");
SharedPreferences lockPreference = context.getSharedPreferences(GcmIntentService.PREFERENCE_NAME, Context.MODE_PRIVATE);
newpassword = lockPreference.getString("newpassword", "");
Log.i(TAG, "Password from shared prefs: " + newpassword);
Toast.makeText(context, "Sharedprefs password:" + newpassword, Toast.LENGTH_SHORT).show();
}
}
toast 只显示 Sharedprefs 密码:
这是activity2,可以读取prefs没问题
public class Activity2 extends Activity {
String newpassword;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.set);
//retrieve shared prefs
SharedPreferences lockPreference = getSharedPreferences(GcmIntentService.PREFERENCE_NAME, Context.MODE_PRIVATE);
newpassword = lockPreference.getString("newpassword", "");
然后我可以创建一个toast 或其他任何东西。
我不明白为什么广播接收器会失败,这不是同一个上下文吗??
【问题讨论】:
-
粘贴并删除了代码?解决了吗?
-
请显示您尝试访问 SharedPreferences 的所有位置的代码 - BroadcastReceiver 代码显然是调试代码,但您不会在上下文中显示 Activity2 代码。
标签: android broadcastreceiver sharedpreferences