将对象写入文件并读取它们

时间:2018-05-19 22:41:18

标签: java android hashmap object-storage

我需要我的应用程序在应用程序关闭时保存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;
    }
}

0 个答案:

没有答案