2013-11-26 45 views
0

我2个机器人应用通信throught一个AIDL文件:机器人:SharedPreferences未更新

应用程序A < == AIDL ==>应用B(服务)

应用A调用的应用的方法B(服务)返回一些JSON信息。但是,如果用户未登录到应用程序B,则返回空值。

(在应用程序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; 
} 

如果返回null, “登录”,在应用B的活动是从应用A.

(Aplication A)

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

Editor 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(); 
} 

因此,当您填写登录表单并回拨活动A时,它会读取新的共享首选项!

+0

正如我对Arju所说的,我更新了我的源代码。对不起! – johann

+0

如果您用B和B重新启动登录,A是否正常工作? – iGio90

+0

如果我第一次登录B应用程序,然后启动一个应用程序,它运作良好(我的意思是返回JSON)。 – johann

0

由于您需要访问其他application的共享首选项。

你应该尝试:: Android: Retrieving shared preferences of other application

+1

Sorrry,我还没有重新定义编辑器(复制/粘贴错误) – johann

+0

好吧,尝试在该链接中的答案由 提供danhnn.uit –

+0

谢谢。自从应用程序B的服务访问应用程序B的sharedPreferences以来,我不必共享首选项。应用程序A不直接访问首选项。 – johann

1

经过长期斗争,我终于成功地让我更新的偏好。

当调用getSharedPreferences时,我使用Context.MODE_MULTI_PROCESS标志。

MODE_MULTI_PROCESS

谢谢。