项目销毁主页Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService异常

项目需求,项目退出登录的时候,跳转登录页面,重新登录,会重新进入首页。很简单的需求,只需在退出的时候将存储的用户信息销毁,把之前活跃的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);
}

问题解决,记录下
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值