只是想问你一个更好的方法来重置用户想要注销的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
答案 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
方法,因为它做了别的事情,可能它的责任在于另一个类。