Обновление объекта, сохраненного в одном действии, из другого действия - PullRequest
2 голосов
/ 12 апреля 2019

Я создаю объект под названием «AppEngine» внутри моего первого действия. Этот объект AppEngine хранит и arrayList of Events, и начинается с двух событий внутри него.

В первом занятии я нажимаю кнопку, которая переводит меня во второе занятие, в котором я добавляю объект события в arrayList с помощью.

appEngine.getList.add(new Event)

Находясь в Занятии 2, если мне нужно позвонить appEngine.getList.size(), размер правильно возвращается как 3, и я вижу дополнительное событие.

Когда я снова переключаюсь на Занятие 2, я звоню appEngine.getList.size(), однако он возвращает только 2, и дополнительного события там нет. Как я могу получить объект appEngine для обновления?

Ответы [ 4 ]

0 голосов
/ 13 апреля 2019

Вы можете использовать Singleton Шаблон проектирования.

Вы создаете один объект из AppEnginRepository с полем eventList, и в вашем приложении вы просто получаете это, и каждый раз, когда вы хотите, вы меняете это.

public class AppEnginRepository {

    private List<Event> eventList;

    private static final AppEnginRepository ourInstance = new AppEnginRepository();

    public static AppEnginRepository getInstance() {
        return ourInstance;
    }

    private AppEnginRepository() {
        eventList = new ArrayList<>();
    }

    public List<Event> getEventList() {
        return eventList;
    }

    public void setEventList(List<Event> eventList) {
        this.eventList = eventList;
    }


}

В вашей деятельности

AppEnginRepository enginRepository=AppEnginRepository.getInstance();
List<Event> eventList=enginRepository.getEventList();
eventList.add(new Event());
int eventListSize=eventList.size();
0 голосов
/ 12 апреля 2019

Если вы хотите, чтобы объект appEnginge сохранялся только в течение одного сеанса приложения, а не сохранялся при закрытии / перезапуске полного приложения, то вам следует использовать класс обработчика.

EngineHandler.java:

public static class engineHandler {
   public static appEnginge _appEngine;
}

, а затем просто позвоните

engineHandler._appEngine = _myAppengine;
engineHandler._appEngine.getList().add(new Event);

из ваших действий.EngineHandler будет доступен из любой активности в вашем приложении.

0 голосов
/ 12 апреля 2019

Было бы хорошо думать, что каждое действие полностью отделено. Технически это спорно, но это хорошее предположение, чтобы проектировать чище и безопаснее программного обеспечения.

Учитывая это предположение, существует несколько подходов к ведению данных между операциями в приложении.

  • В качестве ответа @Sandeep Malik используйте хранилище, предоставляемое ОС SharedPreference.
  • Аналогично ответу @Joachim Haglund, используйте шаблон Singleton для поддержки объекта в приложении.
  • Или используйте небольшую базу данных, такую ​​как Realm .

Каждый подход имеет аналогичную моду; должно быть изолированное и независимое хранилище, которое не принадлежит ни одному из Activity, но принадлежит ApplicationContext или его базовой операционной системе.

0 голосов
/ 12 апреля 2019

сохраните ваш список массивов в общих настройках, как это, создайте класс AppPreference: -

public class AppPreference {

private static SharedPreferences mPrefs;
private static SharedPreferences.Editor mPrefsEditor;

public static Set<AppEngine> getList(Context ctx) {
        mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
        return mPrefs.getStringSet("AppEngineList", null);
    }

    public static void setList(Context ctx, ArrayList<AppEngine> value) {
        mPrefs = PreferenceManager.getDefaultSharedPreferences(ctx);
        mPrefsEditor = mPrefs.edit();
        Set<String> set = new HashSet<>();
        set.addAll(value);
        mPrefsEditor.putStringSet("AppEngineList", set);
        mPrefsEditor.commit();
   }
}

установить значение с первого действия следующим образом: -

setList(YourActivity.class, list);

и получите список из любого места в вашем приложении: -

ArrayLis<AppEngine> list = AppPreference.getList(yourActivity.class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...