项目需求,项目退出登录的时候,跳转登录页面,重新登录,会重新进入首页。很简单的需求,只需在退出的时候将存储的用户信息销毁,把之前活跃的activity销毁,重新跳转进入登录界面即可。但是在真正执行退出登录的时候,却出现了问题:退出登录销毁主页的时候,因为主页里面嵌套fragment,fragment中执行这自定义控件,导致在销毁的时候,出现
java.lang.NullPointerException: Attempt to invoke virtual method ‘java.lang.Object android.content.Context.getSystemService(java.lang.String)’ on a null object reference
报错,于是改变思路,将首页数据不销毁,在退出登录的时候不销毁主页,先跳转主页,然后从主页去跳转登录页面,登录成功之后销毁登录页面,然后直接进入了主页,从而实现了该需求。。如此聪明如我。
但是,,but,,然鹅并没有什么卵用,原因是我们的项目是两个客户端在一块的,就是用户用不同身份的账户进入的页面是不一样的,主页也是不一样的,只是说根据账户的不同登录进入不同的账户,那么问题就来了,如果用户刚开始使用的账户是商家的,退出登录之后使用用户的账户去登录,按照之前的思路,首页是没有变化的,就会依旧使用商家的界面,接口啥的都不一样,数据也不同,于是,,扑街,,,,
木办法,上个方案失败,继续,依然销毁主页,然后跳转进入登录页面,退出登录之后只有一个登录页面存在,至于之前导致崩溃的情况就想办法解决,问题出在当activity被销毁时重建,其上的view的状态和数据会被保存,以便数据恢复。所以在单独的fragment中不让状态保存就可以避免这个问题:
在Main中重写protected void onSaveInstanceState(Bundle outState);如下
/**
* 当activity销毁时不保存其内部的view的状态
*@paramoutState
*/
@Override
public voidonSaveInstanceState(Bundle outState) {
//将super调用取消即可,表明当意外(比如系统内存吃紧将应用杀死)发生我不需要保存Fragmentde状态和数据等
//super.onSaveInstanceState(outState);
}