Запись объектов в файлы и их чтение - PullRequest
0 голосов
/ 20 мая 2018

Мне нужно, чтобы мое приложение сохраняло 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;
    }
}
...