Android:在MainActivity中注销时重置类变量

时间:2016-10-15 08:30:24

标签: java android

只是想问你一个更好的方法来重置用户想要注销的MainActivity的所有类变量而不是我在这里提出的那个。

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

类变量userId,list1,list2和prefs在特定用户的其他位置设置。如果用户注销,则应为“null”。 这里的问题是每次我想添加一个类变量时,它也必须在logOut()中被“null”。如果我要添加越来越多的类变量,这可能是一个容易出错的来源。你能给我一个更好的办法吗?

谢谢,

Ayox

4 个答案:

答案 0 :(得分:1)

建议,自己调用Android生命周期方法被认为是“不好的做法”。

我建议您从onCreate方法中提取所有自定义初始化方法,然后从logOut()

调用它

希望它有所帮助!

答案 1 :(得分:1)

您可以使用Reflection重置所有实例变量。它不是一个优雅的解决方案,但它将确保所有变量都无效。

Field[] fields = object.getClass().getDeclaredFields();
for (Field f : fields) {
  f.setAccessible(true);
  f.set(object, null);
}

答案 2 :(得分:0)

我建议不要将static用于类变量(如userId的情况)。

此外,由于您的类变量存储与会话相关的数据,您可以将其存储在SharedPreferences中,并在注销时调用prefs.clear(),其中可以定义clear()方法就像SharedPreferences#edit().clear().apply();

之类的东西

答案 3 :(得分:0)

我想不出比实现Closeable接口更好的解决方案并在close()方法中清除变量,然后在注销时调用它。 我建议重命名/删除logOut方法,因为它做了别的事情,可能它的责任在于另一个类。