(稍有不同的問題另外一個我剛剛發佈,道歉,如果這是違反規則的)我設置一些共享偏好Sharedpreferences不可訪問,
在我的活動1,接下來我開始另一個activity2通過intent並設置sharedpreferences
的一些textviews ...這一切工作正常。
繼承人我的問題。 在我的第一個activity1中,我有一個alarmmanger
,它有一個掛起的意圖,這個掛起的意圖是一個廣播接收器,用於鎖定電話,然後啓動activity2。這項活動與上述第二項活動相同。但是,當此活動從broadcastreceiver
開始時,沒有任何文字瀏覽從sharedpreferences
加載。這隻發生在從broadcastreceiver
開始活動2時。
SharedPreference
在活動一個被設置爲
SharedPreferences lockPreferences = getSharedPreferences("lockprefs", Context.MODE_PRIVATE);
中活性2相同的方式
SharedPreferences lockPreferences = getSharedPreferences("lockprefs", Context.MODE_PRIVATE);
進行訪問,我可以那麼的getString等
當活性2從廣播接收器開始,沒有任何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();
}
}
的烤麪包只是顯示Sharedprefs密碼:
這是活性2,可以讀出首選項沒有問題
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
或其他什麼。
我不明白爲什麼它的廣播接收機失敗,是不是相同的上下文?
粘貼並刪除了代碼?它解決了嗎? – user2450263
請從所有您嘗試訪問SharedPreferences的地方顯示代碼 - BroadcastReceiver代碼顯然是調試代碼,但您不會在上下文中顯示Activity2代碼。 –