Обновление объекта, сохраненного в одном действии, из другого действия

1

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

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

appEngine.getList.add(new Event)

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

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

Теги:
android-activity

4 ответа

0

Вы можете использовать Singleton Design Pattern.

Вы создаете один объект из 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

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

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

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

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

0

сохраните список массивов в общих настройках, как это, создайте класс 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);
  • 0
    Какое действие я создаю класс AppPreference и как я могу получить к нему доступ из второго действия?
  • 0
    Вы должны создать класс Java в вашем пакете. на самом деле вы можете использовать общие предпочтения, такие как мини-базы данных в вашем приложении, это лучшая практика для сохранения значений в вашем приложении и получения этих значений там, где вы хотите
Показать ещё 4 комментария
0

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

EngineHandler.java:

public static class engineHandler {
   public static appEnginge _appEngine;
}

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

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

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

  • 0
    Я пытаюсь реализовать этот код, но получаю сообщение об ошибке, утверждая, что статический здесь не разрешен.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню