Java Android:在MainActivity中注销时重置类变量
我只是想问你一个更好的方法,当用户想要注销时重置MainActivity的所有类变量,而不是我在这里介绍的方法Java Android:在MainActivity中注销时重置类变量,java,android,Java,Android,我只是想问你一个更好的方法,当用户想要注销时重置MainActivity的所有类变量,而不是我在这里介绍的方法 public class MainActivity extends AppCompatActivity{ public static String userId; private ArrayList<String> list1 = new ArrayList<>(); priva
public class MainActivity
extends AppCompatActivity{
public static String userId;
private ArrayList<String> list1 = new ArrayList<>();
private ArrayList<String> list2 = new ArrayList<>();
private Prefs prefs;
private void logOut(){
userId = null;
list1 = new ArrayList<>();
// Helperlist of all the Ids in "friends"
list2 = new ArrayList<>();
prefs = null;
onCreate(null);
}
}
公共类活动
扩展AppCompative活动{
公共静态字符串用户标识;
private ArrayList list1=新的ArrayList();
private ArrayList list2=新的ArrayList();
私人优先权;
私有无效注销(){
userId=null;
list1=新的ArrayList();
//“朋友”中所有ID的帮助列表
list2=新的ArrayList();
prefs=null;
onCreate(空);
}
}
类变量userId、list1、list2和prefs是为特定用户设置的。如果用户注销,则应为“null”。
这里的问题是,每次我想添加一个类变量时,在logOut()中也必须将其设置为“null”。如果我要添加越来越多的类变量,这可能是一个容易产生错误的来源。你能给我一个更好的方法吗
谢谢
Ayox我建议不要对类变量使用
static
(如userId
)
此外,由于类变量存储会话相关数据,因此可以将其存储在
SharedReferences
中,并在注销时调用prefs.clear()
,其中clear()
方法可以定义为类似SharedReferences\edit().clear().apply()的内容
我想不出比实现一个可关闭的
接口更好的解决方案,在close()
方法中清除变量,然后在注销时调用它。
我建议重命名/删除
logOut
方法,因为它还有其他功能,可能它的职责在另一个类中 一项建议是,自己调用Android生命周期方法被认为是一种“糟糕的做法”
我建议您将所有自定义初始化提取到一个自定义方法,然后从logOut()调用它
希望有帮助 您可以使用反射重置所有实例变量。这不是一个优雅的解决方案,但它将确保所有变量都为空
Field[] fields = object.getClass().getDeclaredFields();
for (Field f : fields) {
f.setAccessible(true);
f.set(object, null);
}
当类被销毁时,类变量的作用域结束。如果你在同一个活动中保持注销和登录,那么除了我没有其他方法之外,没有别的方法。静态:是的,我必须改变它,在我的ToLoistSyrdPosiy上:惯于帮助或者有点复杂,因为我也有来自自己创建的对象的变量,但是我会考虑它。如果没有更好的解决方案,为什么这是一种不好的做法?或者它的缺点是什么?因为它们是回调方法,Android系统会在应用程序执行的确定点调用它们,例如,当创建活动或恢复活动时。这是一种非常好且简单的方法。为什么它不被认为是“优雅的”?因为反射会使代码慢一点。因此,这是在速度和方便之间的权衡;我想补充一点,还有安全限制和内部暴露: