我需要我的应用程序在应用程序关闭时保存HashMaps并恢复存储在3个HashMaps和一个ArrayList上的信息。
如果我使用>>删除这两行我的应用程序工作正常,但数据不存储在任何地方,所以你必须每次都注册。
虽然当我添加这些行时即使你注册也无法登录,这是非常奇怪的。另一个重要的事情是没有抛出异常。
非常重要的一点是,我的HashMap和ArrayList作为静态字段位于不同的类中,以便所有对象和活动都可以访问
此方法是我的应用开始的主要活动。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
btnLogin=findViewById(R.id.buttonLogin);
btnRegister=findViewById(R.id.buttonRegister);
presenter=new LoginPresenter(this,getApplicationContext());
>>presenter.loadDataToDB();
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
User curUser=presenter.login();
if(curUser!=null){
Intent intent=new Intent(Login_activity.this,
curUser.getUserType());
intent.putExtra("User",curUser.getMail());
startActivity(intent);
>>presenter.saveDataToDB();
finish();
}
}
});
LoginPresenter类中的方法如下
public void loadDataToDB(){
try {
EventManagersDB.loadAllManagers((HashMap<EventManager, String>)
readArrayListFromSD(context, EVENTMANAGERDB));
UsersDB.loadFromFile((HashMap<User, String>)
readArrayListFromSD(context, USERSDB));
ParentsDB.loadFromFile((HashMap<Parent, String>)
readArrayListFromSD(context, PARENTSDB));
EventsDB.setAllEvents((ArrayList<Event>)
readArrayListFromSD(context, EVENTSDB));
}catch (Exception e){
e.printStackTrace();
}
}
public void saveDataToDB(){
saveDataToSD(context,EVENTSDB, EventsDB.getAllEvents());
saveDataToSD(context,USERSDB,UsersDB.getAllUsers());
saveDataToSD(context,PARENTSDB, ParentsDB.getParents());
saveDataToSD(context,EVENTMANAGERDB,EventManagersDB.getAllEventManagers());
}
private void saveDataToSD(Context mContext, String filename, Object list){
try {
FileOutputStream fos = mContext.openFileOutput(filename + ".dat"
, mContext.MODE_PRIVATE);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(list);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private Object readArrayListFromSD(Context mContext,String filename){
try {
FileInputStream fis = mContext.openFileInput(filename + ".dat");
ObjectInputStream ois = new ObjectInputStream(fis);
Object obj= ois.readObject();
fis.close();
return obj;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}