2013-11-26 2 views
0

Мои 2 андроид приложения взаимодействуют Повсеместно в AIDL файл:Android: SharedPreferences не обновлял

< приложение А == AIDL ==> Приложение B (услуга)

Применение А вызывает методы применения B (служба), которая возвращает некоторую информацию JSON. Однако, если пользователь не зарегистрирован в приложении B, возвращается null.

(служба в заявке B)

//first : get info 
SharedPreferences mPrefs = getSharedPreferences(Consts.SP_NAME, MODE_PRIVATE); 
String userId = mPrefs.getString(Consts.PREFS_USER_ID, ""); 
String userPass = mPrefs.getString(Consts.PREFS_USER_PASS, ""); 

//then check is valid (remote server) 
if (dao.exist (userId, userPass)){ 
return "MY_JSON_INFO" ; 
}else{ 
return false; 
} 

Если нуль возвращается, "Логин" деятельность в приложения B запускается из приложения А.

(Aplication А)

if(json == null){ 
    Intent intent = new Intent("jp.app.LOGIN_ACTIVITY"); 
    startActivity(intent); 
} 

Вход пользователя (приложение B), данные сохраняются в SharedPreferences (приложение B), и активность закрыта (обратно в приложение A).

SharedPreferences mPrefs = a.getSharedPreferences(Consts.SP_NAME, MODE_PRIVATE); 
Editor prefsEditor = mPrefs.edit();  
prefsEditor.putString(Consts.PREFS_USER_ID, id); 
prefsEditor.putString(Consts.PREFS_USER_PASS, pass); 
prefsEditor.commit(); 

При повторном попытке вызова методов приложения B данные входа, сохраненные несколько секунд назад, недоступны, и возвращается null.

Я пробовал без успеха с prefsEditor.apply().

Если перезапустить приложение B, регистрационные данные будут загружены ....

Пожалуйста, дайте мне знать, если дополнительная информация не требуется. Спасибо

+0

Редактор prefsEditor = prefsEditor.commit(); измените эту строку только на \ prefsEditor.commit(); – Avijit

+0

Я обновил свое сообщение, извините – johann

ответ

0

Читая ваш комментарий я могу дать вам быстрое решение:

Чем проще способ просто прекратить вашу деятельность (A) перед вызовом входа активности внутри службы.

if(json == null){ 
    Intent intent = new Intent("jp.app.LOGIN_ACTIVITY"); 
    startActivity(intent); 
    this.finish(); 
} 

Так что, когда вы заполните форму для входа в систему и перезвоните ее, она прочитает новые общие настройки!

+0

Как я уже сказал Арью, я обновил свой исходный код. Извини ! – johann

+0

Работает ли A отлично, если вы входите в систему с B и B, перезапустили? – iGio90

+0

Если я впервые вхожу в систему с помощью приложения B, а затем запустил приложение, он работает хорошо (я имею в виду, что возвращается JSON). – johann

0

Поскольку вам нужно получить доступ к общим предпочтениям других application.

Вы должны попробовать :: Android: Retrieving shared preferences of other application

+1

Сорри, я не переопределял редактор (ошибка копирования/вставки) – johann

+0

Хорошо, попробуйте ответить в этой ссылке предоставлено danhnn.uit –

+0

Спасибо. Мне не нужно делиться предпочтениями, поскольку служба приложения B имеет доступ к sharedPreferences приложения B. Приложение A не имеет прямого доступа к предпочтениям. – johann

1

После долгой борьбы, я наконец-то удалось получить мои обновленные предпочтения.

При вызове getSharedPreferences я использую флаг Context.MODE_MULTI_PROCESS.

MODE_MULTI_PROCESS

Спасибо.