แงแแแแ แแแแฎแแแ แแแแแ แแแแแกแแแแแ แแฆแแแก แกแฌแ แแค แแแจแแแแแก แแ แ แแแแแ แแแแก แแแแแแฃแ แแแแแแแชแแแแจแ. แแฃ แแแแแแแชแแแก แแแจแแแแแก แแแแ แแ แ แแแกแญแแ แแแแ, แแแแฎแแแ แแแแแ แแฌแงแแแก แกแแแแแก แแ แแแแ แแแแแแก. แแฅแแแ แจแแแแซแแแแ แแแ แขแแแแ แแแแคแฃแญแแ แแแแฎแแแ แแแแแก แแแแแชแแแแแแ แแ แแแแแแแแ แแแแแ แแแ แแแแฎแแแ แแแแแ, แกแแแแ แแก แแแแแแแชแแแก แแแแแงแแแแแแก แแแแฌแงแแแก.
แแ แแฎแแ แแฆแแแแแฉแแแแ, แ แแ Dodo Pizza แแแแแแแชแแแก แแแจแแแแแก แกแแจแฃแแแแ 3 แฌแแแ แกแญแแ แแแแ, แแแแแแ แ โแแฆแแแแแแกโ แแ 15-20 แฌแแแ.
แคแ แแแแแแขแแก แฅแแแแแ แแ แแก แแแแแแ แแแแแแแ แ แแแกแแกแ แฃแแแ: Realm แแแแแชแแแแ แแแแแก แแ แแแแ, แแแฎแกแแแ แแแแก แแแแแแแแก แจแแกแแฎแแ, แ แแแแ แแแแแแ แแแแ แฌแงแแแแแ แแแแแฅแขแแแ, แจแแแแแ แแ แจแแแแ แแแแ แแแแ แแ แแแแแคแแฅแกแแ แแ แงแแแแแคแแ แ.
แกแขแแขแแแก แแแขแแ แ:แแแฅแกแแ แแแฉแแแแแแ โ Android-แแก แแแแแแแแแ แ Dodo Pizza-แจแ.
แกแแแ แฌแแแ แแแแแแแชแแแก แฎแแขแฃแแแแ แแแฌแแแแฃแแแแแแแ แแแ แแแแ แแฅแขแแแแแแก onResume()-แแแ แแ แแก แฃแกแแกแ แฃแแแแ. แแแแแแ แแ แแแแฎแแแ แแแแแกแแแแก แแ แแแจแแแแแก แแ แ 15-20 แฌแแแก แแฆแฌแแแแ. แ แแแแ แแ แแก แแก แกแแแ แแแ แจแแกแแซแแแแแแ?
แซแแแแแ แแแแแ แ แแแแฃแแ แแแแแแแก, แแแกแแช แฌแแแแแฎแแแก แแ แ แแ แแฅแแก
แฉแแแแ Realm แแแแแชแแแแ แแแแ แฃแกแแกแ แฃแแแ แแแแแแ แแ. แแแแแแ แแ แฌแงแแแแแ แแแแแฅแขแ แแ แฌแแแจแแแ, แแแแ แแ แแฃแแแแแแ แแ แแแแแแแแ. แแแแแแแชแแแก แแแจแแแแแก แแ แ แแแแแแแแ แแแแแแ แแ. แแแ แ แแแแแกแฌแแ แแ แแ แแแจแแแแแก แแ แ แแแแแแก แแแแฆแฌแแ - 1 แฌแแแแ แแแแแแแ แแแฎแแ แแ แแฆแแ แแแแแแ แแ. แกแขแแขแแแจแ แแแชแแแฃแแแ แกแแขแฃแแชแแแก แแแแแแแ แแ แแ แ แแแแแกแแแแแ - แกแฌแ แแคแ แแ แแแ แแแแฃแ แ.
แแ แแแแแแแก แซแแแแ แแ แแแแแแแ
แแฆแแก แแแแแกแแแแ แ แแแแแแฃแ แ แแแแแแแชแแ แฃแแแ แแแแฌแงแแก แกแฌแ แแคแแ แแ แแงแแก แแแกแฃแฎแแกแแแแแแแ. แแแแ แแ แแก แแ แแฎแแแ แแฎแแแแ แแแแแแฃแ แแแแแแแชแแแก. แกแแ แแแกแแแ แแ แแแแแแแแแกแแแ แฃแ แแแแ แแฅแแแแแแแก แแแแฎแแแ แแแแแก แแแแแชแแแแแแ แ แแฃแแ แกแแแแแฎแแ. แแแแแแแแแ, แฉแแแแก แจแแแแฎแแแแแจแ, แแแฌแแแแแแก แกแแฉแฅแแ แ แแแชแแก แกแแ แแแกแแก แแ แ-แแ แแ แแแแแแ แ แแแฉแแแแแแแแแ. แแฃ แแแฌแแแแแ แกแฌแ แแคแแ, แแแชแ แชแฎแแแ แแฅแแแแ แแ แแแแฎแแแ แแแแแก, แ แแแแแกแแช แแฎแแ แกแฃแ แก แญแแแ, แแแแฎแแแก แแแแแแ แแ แแแฃแฌแแแก. แแแแแแแชแแแกแแแแก, แแแแแก แแฎแ แแ, แแแแจแแแแแแแแแแ แกแฌแ แแคแ แกแแ แแแกแแก แแแแชแแแก แจแแฅแแแ, แ แแแแแ แแฃ แแแแแแแชแแแก แแแจแแแแแก แแฎแแแแ 20 แฌแแแ แกแญแแ แแแแ, แแแจแแ แ แแแแแแ แฎแแแ แแแแแฌแแแ แแแชแแก แแแแแแ?
แแแแแแแ แฉแแแ แแแแแแ แแแแแแฅแแ แแ แคแแฅแขแแก แฌแแแแจแ, แ แแ แแแแฏแแ แแแแแแแชแแแก แแแจแแแแแก แ แแแแแแแแ แฌแแแ แกแญแแ แแแแแแ, แจแแแแแ แแ แกแฎแแ แแแแแแแแแกแแแ แฉแแแแแแแแก แแแกแแแแ แแแแแฌแงแแ แแแแก แจแแกแแฎแแ, แแฃ แ แแแแแ แฎแแแก แกแญแแ แแแแแแ. แแแแ แแ แฉแแแ แแแ แจแแแซแแแแ แแ แแแแแแแ แแแแแก แแแแฃแแแแแแ แแแแแแ แแแ.
แ แแแแแแ แฎแแแแ? แฒแแฎแแแแแ
แแแแ แแ แจแแแแแ แแแแแฉแแแ แฉแแแแแแแ, แ แแ แแแแแชแฎแแแแก แแแจแแแแแก แซแแแแแ, แซแแแแแ, แซแแแแแ แแแแ แแ แ แแแกแญแแ แแ! แแแกแแฌแงแแกแแกแแแแก, แฉแแแ แแแแแแฌแงแแแขแแ แแแแแแแแแ แ แ แแ แแก โแซแแแแแ, แซแแแแแ, แซแแแแแ แแ แซแแแโ. แแแแกแแแแแก แฉแแแ แแแแแแแงแแแแ Firebase แแแแแ
แแก แกแขแแแแแ แขแฃแแ แแแแแ แแแแแแก แแ แแก แแ แแแแแแขแก แจแแ แแก, แ แแแแกแแช แแแแฎแแแ แแแแแ แแแฎแกแแแก แแแแแแแชแแแก แแ แแแ แแแแ แแฅแขแแแแแแก onResume() แจแแกแ แฃแแแแแก แจแแ แแก. Firebase Console-แจแ แแ แแแขแ แแแแก แแฌแแแแแ _app_start. แแฆแแแฉแแแ, แ แแ:
- แแแจแแแแแก แแ แ 95-แ แแ แแชแแแขแฃแแแ แแแแแ แแแแฎแแแ แแแแแแแกแแแแก แแ แแก แแแแฅแแแก 20 แฌแแแ (แแแแแแ แแ แฃแคแ แ แแ แซแแแ), แแแฃแฎแแแแแแ แแแแกแ, แ แแ แชแแแ แแแจแแแแแก แกแแจแฃแแแ แแ แ 5 แฌแแแแ แแแแแแแแ.
- แแแจแแแแแก แแ แ แแ แแ แแก แแฃแแแแแ แแแแจแแแแแแแ, แแแแ แแ แแ แแแ แแแแแแแแแแแจแ แแแ แแแแ. แแแแ แแ แแแแฏแแ แแ แแก แฌแแแแแแ. แฉแแแ แแฆแแแแแฉแแแแ แแก แแแแฃแจแ, แ แแแแกแแช แฉแแแ แแแแแแ แแแ แแแแแแแแก แแแกแจแขแแแ 90 แแฆแแแแ.
แแ แ แแแ แ แแแแแแแแ แแแแจแ:
- แ แแฆแแช แแแแแแก.
- แแก "แ แแฆแแช" แแแแแขแแแ แแฃแแแ แแแแแจแแแแแก แจแแแแแ แแ แจแแแแแ แแกแแ แแแแแแแแก.
โแแแแแ แ แแฆแแช แแแแแชแแแแ แแแแแจแแโ, แแคแแฅแ แแแแแ แแ แแแ แแแแ แแแงแแแแ. แแแ แแแ แ แแแจแ, แฉแแแ แแแงแแแแแ แแแแแชแแแแ แแแแแก, แ แแแแ แช แฅแแจแ; แแแแ แแชแแแก แแ แแก แแแกแฃแคแแแแแแ แแแก. แแแแ แแช, แแแแแชแแแแ แแแแ แแขแแแ แแแแ แแแแแชแฎแแแแก แแแฌแงแแแแกแแก. แงแแแแแคแแ แ แแ แแแแแแแจแ แฏแแแแ.
แ แ แญแแ แก Realm แแแแแชแแแแ แแแแแก
แฉแแแ แแแแแฌแงแแ แแแแก แจแแแแฌแแแแ, แแฃ แ แแแแ แแชแแแแแ แแแแแชแแแแ แแแแแก แจแแแแแ แกแ แแแแแแแชแแแก แกแแชแแชแฎแแแก แแแแแแแแแแแจแ, แแแ แแแแ แแแกแขแแแแชแแแก แจแแแแแ แแ แจแแแแแแ แแฅแขแแฃแ แ แแแแแงแแแแแแก แแ แแก. แแฅแแแ แจแแแแซแแแแ แแแฎแแ Realm แแแแแชแแแแ แแแแแก แจแแแแแ แกแ
adb exec-out run-as ${PACKAGE_NAME} cat files/${DB_NAME}
แกแฎแแแแแกแฎแแ แแ แแก แแแแแแแแ แแแ แแแแแชแแแแ แแแแแก แจแแแแแ แกแก, แแฆแแแแแฉแแแแ, แ แแ แแแ แแแแฃแแ แขแแแแก แแแแแฅแขแแแแก แ แแแแแแแแ แแฃแแแแแแ แแแ แแแแ.
แกแฃแ แแแแ แแแฉแแแแแแแ Realm Studio-แก แคแ แแแแแแขแ แแ แ แคแแแแแกแแแแก: แแแ แชแฎแแแ - แแแแแแแชแแแก แแแแ แแแกแขแแแแชแแแก แจแแแแแ, แแแ แฏแแแแ - แแฅแขแแฃแ แ แแแแแงแแแแแแก แจแแแแแ. แฉแแแก, แ แแ แแแแแฅแขแแแแก แ แแแแแแแแ ImageEntity
ะธ MoneyType
แแแแจแแแแแแแแแ แแแแแแ แแ (แกแแ แแแจแแขแ แแฉแแแแแแก แแแแแแฃแแ แขแแแแก แแแแแฅแขแแแแก แ แแแแแแแแแก).
แแแแจแแ แ แแแแแชแแแแ แแแแแก แแ แแแกแ แแ แแแจแแแแแก แแ แแก แจแแ แแก
แแแแแชแแแแ แฃแแแแขแ แแแ แแ แแ แซแแแแแ แชแฃแแแ. แแแแ แแ แ แแแแ แแแฅแแแแแแก แแก แแแแแแแชแแแก แแแจแแแแแก แแ แแแ? แแแแก แแแแแแแ ActivityManager-แแก แแแจแแแแแแ แกแแแแแแ แแแ แขแแแแ. Android 4.4-แแแ แแแงแแแแแฃแแ, logcat แแฉแแแแแแก แแฃแ แแแแก แแแฉแแแแแแ แกแขแ แแฅแแแแ แแ แแ แแก. แแก แแ แ แฃแแ แแก แแแขแแ แแแแก แแแแแแแชแแแก แแแจแแแแแแแ แแฅแขแแแแแแก แ แแแแแ แแก แแแกแ แฃแแแแแแแ. แแ แแ แแก แฎแแแแ แจแแแแแแ แแแแแแแแแ:
- แแแแฌแงแแ แแ แแชแแกแ.
- แแแแแฅแขแแแแก แแแแชแแ แแแ.
- แแฅแขแแแแแแแแก แจแแฅแแแ แแ แแแแชแแแแแแแชแแ.
- แแแแแแแแแแก แจแแฅแแแ.
- แแแแแแแชแแแก แ แแแแแ แ.
แแแแ แแแแ. แแฃ แแฅแแแ แแฌแแ แแแแแ ADB-แก -S แแ -W แแ แแจแแแแ, แจแแแแซแแแแ แแแแฆแแ แแแคแแ แแแแแฃแแ แแแแแแแแแแ แแแจแแแแแก แแ แแแ:
adb shell am start -S -W ru.dodopizza.app/.MainActivity -c android.intent.category.LAUNCHER -a android.intent.action.MAIN
แแฃ แแฅแแแแ แแแฆแแ grep -i WaitTime
แแ แแแ แแแแแแแแแแแจแ, แจแแแแซแแแแ แแ แแแขแ แแแแก แจแแแ แแแแแแก แแแขแแแแขแแแแชแแ แแ แจแแแแแแแแก แแแแฃแแแฃแ แแ แแแแแแแแแ แแแ. แฅแแแแแ แแแชแแแฃแแ แแ แแคแแแ แแแแฉแแแแแแก แแแแแแแชแแแก แแแจแแแแแก แแ แแแก แแแแแแแแแแฃแแแแแก แแแแแแแชแแแก แชแแแ แแแฌแงแแแแก แ แแแแแแแแแแ.
แแแแแแ แแฃแแแ, แแงแ แแแแแ แฎแแกแแแแแก แฃแ แแแแ แแแแ แแแแแชแแแแ แแแแแก แแแแแกแ แแ แแ แแแก แจแแ แแก, แ แแแแแแช แแแแแแ แแ 4 แแ-แแแ 15 แแ-แแแ. แกแแแ แแ แฏแแแจแ, แแแแแแแก, แ แแ แแ แแแ แแแแแแแแแแแจแ (แชแแแ แแแฌแงแแแแก แแ แแแกแแแ แแ แแแ) แแแแแแ แแ แ แแแแ แช แแแแแชแฎแแแแก แแแจแแแแแก แแ แ, แแกแแแ แแแแแชแแแแ แแแแแก แแแแ. แฉแแแ แแแแฅแแก แฐแแแแแแแ แฎแแแจแ. แแฎแแ แแแ แฉแ แแฎแแแแ แแแแแแแแแแฃแแแแแก แแแแแกแขแฃแ แแแ. แแแแขแแ, แฉแแแ แแแแแแฌแงแแแขแแ แแแแแแแฆแ โแแแแแแแแแโ แแ แแแแฎแแ, แแแแฉแฅแแ แแแแ แแฃ แแ แ แแก แแแจแแแแแก.
แแแแแชแแแแ แแแแแก แแแฃแแแแแแแแ แแ แแแก แแแแแแแแ
"แแแแแแแแก" แแแแฆแแแแแแ, แฆแแ แก แแแแก แแแแแแ, แแฃ แ แแขแแ แแแแแฉแแแแแ แแกแแแ แแแ แแแ แ แแแจแ. แแแแกแแแแแก แแแแแฎแกแแแแ แ แ แแ แแก แกแแแแคแ.
Realm แแ แแก แแ แแ แแแแชแแฃแ แ แแแแแชแแแแ แแแแ. แแก แกแแจแฃแแแแแแก แแแซแแแแ แแฆแฌแแ แแ แแแแแฅแขแแแก แจแแ แแก แฃแ แแแแ แแแแแแ แแกแ, แ แแแแ แช แแฆแฌแแ แแแแ Android-แแ ORM-แแก แ แแแแชแแฃแ แ แแแแแชแแแแ แแแแ. แแแแแแ แแฃแแแ, Realm แแแแฎแแแก แแแแแฅแขแแแก แฃแจแฃแแแแ แแแฎแกแแแ แแแแจแ แแแแแแแแฃแ แ แขแ แแแกแคแแ แแแชแแแแแแ แแ แ แฃแแแแแ. แแก แกแแจแฃแแแแแแก แแแซแแแแ แฌแแแแแแฎแแ แแแแแชแแแแแ แแแกแแแแแ แซแแแแแ แกแฌแ แแคแแ, แ แแช แแ แแก Realm-แแก แกแแซแแแแ แ แแ แ แแขแแ แแ แแก แแก แกแแงแแแ แแแ.
(แแ แกแขแแขแแแก แแแแแแแแกแแแแก แแก แแฆแฌแแ แ แกแแแแแ แแกแ แแฅแแแแ แฉแแแแแแแก. แแฅแแแ แจแแแแซแแแแ แฌแแแแแแฎแแ แแแขแ Realm-แแก แจแแกแแฎแแ cool-แจแ
แแแแ แ แแแแแแแแแ แ แแแฉแแแฃแแแ แฃแคแ แ แแแขแแ แแฃแจแแแแแก แ แแแแชแแฃแ แแแแแชแแแแ แแแแแแแแ (แแแแแแแแแ, ORM แแแแแชแแแแ แแแแแแ SQL-แแก แฅแแแจ). แแ แแกแแแ แ แแ, แ แแแแ แแชแแ แแแกแแแแฃแ แ แแแแแชแแแแแแก แฌแแจแแ, แฎแจแแ แแ แแแฉแแแฃแแแ. แแแแ แแ แแ แ แกแแแแคแแจแ.
แกแฎแแแแ แจแแ แแก, แแแกแแแแแก แฌแแจแแแก แคแฃแแฅแชแแ แแแแ แฎแแแแ แแแฎแแแ. แแก
แแแแแชแแแแ แแแแแแแ แแแกแแแแฃแ แ แฌแแจแแแก แแแ แแจแ
แแฃแกแขแแ แ แแแแ แฎแแแแ แแแแแชแแแแแแก แแแแแแแ, แแฃ แแงแ แแแแแแ แแ แแ แกแแแฃแ แแแกแแแแฃแ แฌแแจแแแก? แแฃ แแฅแแแ แแแฅแแ แฉแแกแแฃแแ Realm แแแแแฅแขแแแ, แแแจแแ แแกแแแ แฃแแแ แฌแแแจแแแแก.
แแแแแ แจแแแฎแแแแ (แแแแฅแแแก) แ แแแแฃแ แแแแแแแแก. แฉแแแ แแแแฅแแก แแแแแฅแขแ CartItemEntity
:
@RealmClass
class CartItemEntity(
@PrimaryKey
override var id: String? = null,
...
var name: String = "",
var description: String = "",
var image: ImageEntity? = null,
var category: String = MENU_CATEGORY_UNKNOWN_ID,
var customizationEntity: CustomizationEntity? = null,
var cartComboProducts: RealmList<CartProductEntity> = RealmList(),
...
) : RealmObject()
แแแแแแแจแ แแ แแแฃแฅแขแก แแฅแแก แกแฎแแแแแกแฎแแ แแแแ, แแแ แจแแ แแก แกแฃแ แแแ ImageEntity
, แแแ แแแแฃแแ แแแแ แแแแแแขแแแ CustomizationEntity
. แแกแแแ, แแ แแแฃแฅแขแ แแแแแแแจแ แจแแแซแแแแ แแงแแก แแแแแแแแ แแแฃแแ แแ แแแฃแฅแชแแแก แกแแแฃแแแ แ แแแแ แแแแ RealmList (CartProductEntity)
. แงแแแแ แฉแแแแแแแแแ แแแแ แแ แแก แกแคแแ แแก แแแแแฅแขแแแ. แแฃ แฉแแแกแแแแ แแฎแแ แแแแแฅแขแก (copyToRealm() / copyToRealmOrUpdate()) แแแแแ ID-แแ, แแแจแแ แแก แแแแแฅแขแ แแแแแแแแ แแแแแแฌแแ แแแ. แแแแ แแ แงแแแแ แจแแแ แแแแแฅแขแ (image, customizationEntity แแ cartComboProducts) แแแแแ แแแแก แแแแจแแ แก แแจแแแแแแแ แแ แแแ แฉแแแ แแแแแชแแแแ แแแแแจแ.
แแแก แจแแแแแ, แ แแช แแแแแแ แแแแจแแ แ แแแแแ แแฃแแแ, แฉแแแ แแฆแแ แแแแแฎแฃแแแแ แแแ แแ แแ แแจแแแ แแแ (แแฃ แแ แแแแแฆแแแ แแแ แแแ แแแแแ แฌแแแแแแก แแ แแ แแแแแกแฃแคแแแแแแ แแแแ โแชแฎแ แแแกโ). แฉแแแ แแแแก แแฃแฌแแแแ "แแแฎแกแแแ แแแแก แแแแแแแ".
แ แแแแกแแช แฉแแแ แแแฃแจแแแแ Realm-แแแ, แฉแแแ แแแแคแแแ แฃแแแ แแแแแแ แแ แงแแแแ แแแแแแแขแ แแ แชแแแกแแฎแแ แฌแแแจแแแแ แงแแแแแคแแ แ แแกแแแ แแแแ แแชแแแแแก แฌแแ. แแก แจแแแซแแแแ แแแแแแแแก, แแแแแแแแแ, แแกแ:
val entity = realm.where(CartItemEntity::class.java).equalTo("id", id).findFirst()
if (first != null) {
deleteFromRealm(first.image)
deleteFromRealm(first.customizationEntity)
for(cartProductEntity in first.cartComboProducts) {
deleteFromRealm(cartProductEntity)
}
first.deleteFromRealm()
}
// ะธ ะฟะพัะพะผ ัะถะต ัะพั
ัะฐะฝัะตะผ
แแฃ แแแแก แแแแแแแแแ, แแแจแแ แงแแแแแคแแ แ แแกแ แแแฃแจแแแแแก, แ แแแแ แช แฃแแแ. แแ แแแแแแแแจแ, แฉแแแ แแแแ แแฃแแแแ, แ แแ แแ แแ แกแแแแแก แกแฎแแ แฉแแแแแฃแแ แกแคแแ แแก แแแแแฅแขแแแ แแแแแกแแฎแฃแแแแแก แจแแแแแ, customizationEntity แแ cartComboProducts, แแกแ แ แแ, แแ แแ แกแแแแแก แกแฎแแ แฉแแแแแฃแแ แแแ แงแฃแแแแ แแ แฌแแจแแแแ.
"แกแฌแ แแคแ" แแแแแกแแแแแ
แแแ แแแแ, แ แแช แแแแแแฌแงแแแขแแ, แแงแ แงแแแแแแ แกแฌแ แแคแแ แแแแ แแ แแแแแฅแขแแแแก แแแฌแแแแแ แแ แจแแแแแแแแก แแแแแแแฌแแแแ, แแแแแญแ แแก แแฃ แแ แ แแก แฉแแแแก แแแแแแแแ แแแ แแ แแแแแแแก. แแแ แแแแ, แแแแแแแ แฃแแแ แขแแแแกแ แแ แงแแแแแแ แแแขแฃแแชแแฃแ แ แแแแแฌแงแแแขแ, แแแ แซแแ: แแแแแแฃแแ แแแแแฅแขแ แแแกแฃแฎแแกแแแแแแแ แฃแแแ แแงแแก แแแแแกแ แจแแแแแแแก แแแแฆแแแแแ. แแแแกแแแแแก แฉแแแ แจแแแแแแฆแแ แแแขแแ แคแแแกแ, แ แแแแแแช แแแ แฃแแแแแ แแแกแ แแแแแแฃแแ แกแคแแ แแก แแแแแฅแขแแแแก แกแแแก:
interface NestedEntityAware {
fun getNestedEntities(): Collection<RealmObject?>
}
แแ แฉแแแ แแแแแแฎแแ แชแแแแแ แแก แฉแแแแ แกแแแแคแแก แแแแแฅแขแแแจแ:
@RealmClass
class DataPizzeriaEntity(
@PrimaryKey
var id: String? = null,
var name: String? = null,
var coordinates: CoordinatesEntity? = null,
var deliverySchedule: ScheduleEntity? = null,
var restaurantSchedule: ScheduleEntity? = null,
...
) : RealmObject(), NestedEntityAware {
override fun getNestedEntities(): Collection<RealmObject?> {
return listOf(
coordinates,
deliverySchedule,
restaurantSchedule
)
}
}
ะ getNestedEntities
แฉแแแ แงแแแแ แแแแจแแก แแแแ แฃแแแแ, แ แแแแ แช แแ แขแงแแแ แกแแ. แแ แแแแแแฃแ แแแแจแแแ แแแแแฅแขแก แแกแแแ แจแแฃแซแแแ แแแแแ แแแก NestedEntityAware แแแขแแ แคแแแกแ, แ แแช แแแฃแแแแแแก, แ แแ แแแก แแฅแแก แจแแแ แกแคแแ แแก แแแแแฅแขแแแ แฌแแกแแจแแแแ, แแแแแแแแแ. ScheduleEntity
:
@RealmClass
class ScheduleEntity(
var monday: DayOfWeekEntity? = null,
var tuesday: DayOfWeekEntity? = null,
var wednesday: DayOfWeekEntity? = null,
var thursday: DayOfWeekEntity? = null,
var friday: DayOfWeekEntity? = null,
var saturday: DayOfWeekEntity? = null,
var sunday: DayOfWeekEntity? = null
) : RealmObject(), NestedEntityAware {
override fun getNestedEntities(): Collection<RealmObject?> {
return listOf(
monday, tuesday, wednesday, thursday, friday, saturday, sunday
)
}
}
แแ แแกแ แจแแแแแ, แแแแแฅแขแแแแก แแฃแแ แจแแแซแแแแ แแแแแแแ แแแก.
แจแแแแแ แฉแแแ แแฌแแ แ แแแแแแก, แ แแแแแแช แ แแแฃแ แกแแฃแแแ แฌแแจแแแก แงแแแแ แฉแแแแแฃแ แแแแแฅแขแก. แแแแแแ (แแแแแแแแแฃแแแ แแแคแแ แแแแแแก แกแแฎแแ) deleteAllNestedEntities
แแฆแแแก แงแแแแ แฃแแแฆแแแกแ แแแแแก แแแแแฅแขแก แแ แแแแแแก deleteNestedRecursively
แ แแแฃแ แกแแฃแแแ แจแแแก แงแแแแ แฉแแแแแฃแ แแแแแฅแขแก NestedEntityAware แแแขแแ แคแแแกแแก แแแแแงแแแแแแ:
fun <T> Realm.deleteAllNestedEntities(entities: Collection<T>,
entityClass: Class<out RealmObject>,
idMapper: (T) -> String,
idFieldName : String = "id"
) {
val existedObjects = where(entityClass)
.`in`(idFieldName, entities.map(idMapper).toTypedArray())
.findAll()
deleteNestedRecursively(existedObjects)
}
private fun Realm.deleteNestedRecursively(entities: Collection<RealmObject?>) {
for(entity in entities) {
entity?.let { realmObject ->
if (realmObject is NestedEntityAware) {
deleteNestedRecursively((realmObject as NestedEntityAware).getNestedEntities())
}
realmObject.deleteFromRealm()
}
}
}
แฉแแแ แแก แแแแแแแแแ แงแแแแแแ แกแฌแ แแคแแ แแแแ แแ แแแแแฅแขแแแแ แแ แจแแแแแแฌแแแ แ แ แแแฎแแ.
แจแแแแแแ, แแ แแแแแฅแขแแแแ, แ แแแแแแแช แแ แฎแกแแแ แแ แแแแคแแ แแ, แจแแฌแงแแแขแแก แแ แแ. แแ แแแแแก แกแแแ แแ แแ แแ แจแแแแแแ, แแแแ แแ แแ แจแแฉแแ แแ.
"แแแ แแแแฃแ แ" แแแแแกแแแแแ
แแแฃแฎแแแแแแ แแแแกแ, แ แแ แแแแแ แฃแคแ แ แแแแ แแแแฌแงแ แแ แแ, แแก แแแแแช แแแแแแ แแ. แแกแ แ แแ, แฉแแแ แแแแแฌแงแแ แจแแแแแแแ แซแแแแ. แฉแแแแ แแ แแแฅแขแ แซแแแแแ แแฅแขแแฃแ แแ แแงแแแแแก แแแแแชแแแแ แฅแแจแแ แแแแก Realm-แจแ. แแแแขแแ, แแแแแแฃแแ แแแแแฅแขแแกแแแแก แงแแแแ แฉแแแแแฃแแ แแแแแฅแขแแก แฉแแฌแแ แ แจแ แแแแขแแแแแแ, แแแ แแ แแแแกแ, แจแแชแแแแแแแก แ แแกแแ แแแ แแแแ, แ แแแแแ แแแแแก แจแแชแแแแกแแก แจแแแแซแแแแ แแแแแแฌแงแแ แแแแแฅแขแแแแก แแแแแแแแ.
แแแแแแแ แแแแ แฌแแฃแแแแฃแแแงแแแ, แ แแ แแ แแแงแแแแแแ แแแขแแ แคแแแกแแแก, แแแแ แแ แงแแแแแคแแ แ แแแแแกแแแแแ แแฃแจแแแแแ.
แ แแแแกแแช แฉแแแ แแแแแแ, แ แแ แ แแฆแแช แแแแแฃแแแแแแแแ แแแฃแจแแแก, แฃแแแ แแแแแแแงแแแแ แ แแคแแแฅแกแแ. แแแแกแแแแแก แฉแแแ แจแแแแแซแแแ แแแแแแ แแ แแแแแแฃแแ แแแแกแแก แแแแ แแ แจแแแแแแฌแแแ แแ แแก แแก Realm แแแแแฅแขแ แแฃ แแแแแฅแขแแแแก แกแแ:
RealmModel::class.java.isAssignableFrom(field.type)
RealmList::class.java.isAssignableFrom(field.type)
แแฃ แแแแ แแ แแก RealmModel แแ RealmList, แแแจแแ แแแแแแขแแ แแ แแแแแก แแแแแฅแขแ แฉแแแแแฃแแ แแแแแฅแขแแแแก แกแแแก. แงแแแแแคแแ แ แแฃแกแขแแ แแกแแ, แ แแแแ แช แแแแแ แแแแแแแแแ, แแฎแแแแ แแฅ แแแแแกแแแแแ แแแแแแแแแ. แแแกแแแแแก แฌแแจแแแก แแแแแแ แแแแแกแแแแแ แซแแแแแ แแแ แขแแแแ แแ แแกแ แแแแแแงแฃแ แแแ:
fun <T : Any> Realm.cascadeDelete(entities: Collection<T?>) {
if(entities.isEmpty()) {
return
}
entities.filterNotNull().let { notNullEntities ->
notNullEntities
.filterRealmObject()
.flatMap { realmObject -> getNestedRealmObjects(realmObject) }
.also { realmObjects -> cascadeDelete(realmObjects) }
notNullEntities
.forEach { entity ->
if((entity is RealmObject) && entity.isValid) {
entity.deleteFromRealm()
}
}
}
}
แแแคแแ แแแแแ filterRealmObject
แคแแแขแ แแแก แแ แแแแแก แแฎแแแแ แกแคแแ แแก แแแแแฅแขแแแก. แแแแแแ getNestedRealmObjects
แ แแคแแแฅแกแแแก แกแแจแฃแแแแแแ, แแก แแแฃแแแแก แกแแแแคแแก แงแแแแ แฉแแแแแฃแ แแแแแฅแขแก แแ แแแแแกแแแก แแแ แฎแแแแแแ แกแแแจแ. แจแแแแแ แแแแแแก แแแแแแแแ แ แแแฃแ แกแแฃแแแ. แฌแแจแแแกแแก, แแฅแแแ แฃแแแ แจแแแแแฌแแแ แแแแแฅแขแ แแแแแแแแแกแแแแก isValid
, แ แแแแแ แจแแกแแซแแแ แกแฎแแแแแกแฎแแ แแจแแแแ แแแแแฅแขแก แฐแฅแแแแแ แแฃแแแแ แแแ แแแแแขแฃแ แ แแแแแฅแขแแแ. แฃแแฏแแแแกแแ แแแแแแแ แแแชแแแแ แแก แแ แฃแแ แแแแ แแแแแแงแแแแ id-แแก แแแขแแแแขแฃแ แ แแแแแ แแชแแ แแฎแแแ แแแแแฅแขแแแแก แจแแฅแแแแกแแก.
getNestedRealmObjects แแแแแแแก แกแ แฃแแ แแแแฎแแ แชแแแแแแ
private fun getNestedRealmObjects(realmObject: RealmObject) : List<RealmObject> {
val nestedObjects = mutableListOf<RealmObject>()
val fields = realmObject.javaClass.superclass.declaredFields
// ะัะพะฒะตััะตะผ ะบะฐะถะดะพะต ะฟะพะปะต, ะฝะต ัะฒะปัะตััั ะปะธ ะพะฝะพ RealmModel ะธะปะธ ัะฟะธัะบะพะผ RealmList
fields.forEach { field ->
when {
RealmModel::class.java.isAssignableFrom(field.type) -> {
try {
val child = getChildObjectByField(realmObject, field)
child?.let {
if (isInstanceOfRealmObject(it)) {
nestedObjects.add(child as RealmObject)
}
}
} catch (e: Exception) { ... }
}
RealmList::class.java.isAssignableFrom(field.type) -> {
try {
val childList = getChildObjectByField(realmObject, field)
childList?.let { list ->
(list as RealmList<*>).forEach {
if (isInstanceOfRealmObject(it)) {
nestedObjects.add(it as RealmObject)
}
}
}
} catch (e: Exception) { ... }
}
}
}
return nestedObjects
}
private fun getChildObjectByField(realmObject: RealmObject, field: Field): Any? {
val methodName = "get${field.name.capitalize()}"
val method = realmObject.javaClass.getMethod(methodName)
return method.invoke(realmObject)
}
แจแแแแแแ, แฉแแแแ แแแแแแขแแก แแแแจแ แฉแแแ แแแงแแแแแ โแแแกแแแแฃแ แฌแแจแแแกโ แแแแแแฃแแ แแแแแชแแแแ แแแแแคแแแแชแแแก แแแแ แแชแแแกแแแแก. แแแแแแแแแ, แฉแแกแแแก แแแแ แแชแแแกแแแแก แแกแ แแแแแแงแฃแ แแแ:
override fun <T : Entity> insert(
entityInformation: EntityInformation,
entities: Collection<T>): Collection<T> = entities.apply {
realmInstance.cascadeDelete(getManagedEntities(entityInformation, this))
realmInstance.copyFromRealm(
realmInstance
.copyToRealmOrUpdate(this.map { entity -> entity as RealmModel }
))
}
แแแแแแ แแแ แแแแ getManagedEntities
แแฆแแแก แงแแแแ แแแแแขแแแฃแ แแแแแฅแขแก แแ แจแแแแแ แแแแแแก cascadeDelete
แ แแแฃแ แกแแฃแแแ แจแแแก แงแแแแ แจแแแ แแแแแฃแ แแแแแฅแขแก แแฎแแแก แแแฌแแ แแแแ. แฉแแแ แกแแแแแแแ แแแงแแแแแ แแ แแแแแแแแก แแแแแ แแแแแชแฎแแแแก แแแแแแแแแแแจแ. แแแฎแกแแแ แแแแก แแแแแแแ แกแแแแคแแจแ แแแแแแแแ แแแฅแ แ. แแแจแแแแแก แแ แแแก แแแแแแแแแแฃแแแแแก แแแแแ แแแแแแแแก แจแแแแแ, แแแแแชแฎแแแแก แชแแแ แแแฌแงแแแแก แ แแแแแแแแแแ, แฉแแแ แแฎแแแแแ แจแแแแแก.
แแฌแแแแ แฎแแแ แแแแฉแแแแแแก แแแแแแแชแแแก แแแจแแแแแก แแ แแแก แแแแแแแแแแฃแแแแแก แชแแ แแแฌแงแแแแก แ แแแแแแแแแแ แฉแแแแแฃแแ แแแแแฅแขแแแแก แแแขแแแแขแฃแ แ แแแกแแแแฃแ แ แฌแแจแแแก แแ แแก.
แจแแแแแแแ แแ แแแกแแแแแแ
แแฃแแแแแแ แแแแ แแ Realm แแแแแชแแแแ แแแแ แแฌแแแแแ แแแแแแแชแแแก แซแแแแแ แแแแ แแแจแแแแแก. แฉแแแ แแแแแแแฅแแแงแแแ แแแแแฎแแแแ แฉแแแแแฃแแ แแแแแฅแขแแแแก แกแแแฃแแแ แ โแแแกแแแแฃแ แ แฌแแจแแแโ. แแฎแแ แฉแแแ แแแแแแ แแแแแ แแ แแแคแแกแแแ, แแฃ แ แแแแ แแแแฅแแแแ แฉแแแแแ แแแแแฌแงแแแขแแแแแแ แแแแแแแชแแแก แแแจแแแแแก แแ แแแ _app_start แแแขแ แแแแก แแแจแแแแแแ.
แแแแแแแแกแแแแก, แฉแแแ แแแฆแแแ 90 แแฆแแก แแแ แแแแก แแ แแฎแแแแแ: แแแแแแแชแแแก แแแจแแแแแก แแ แ, แ แแแแ แช แแแแแแแฃแ แ, แแกแแแ แแก, แ แแแแแแช แแแแแก แแแแฎแแแ แแแแแแ 95-แ แแ แแชแแแขแฃแแแ, แแแแฌแงแ แแแแแ แแ แแฆแแ แแแ แแแแ.
แแฃ แแแแแแฎแแแแแ แจแแแแแฆแแแ แแแแแ แแแแก, _app_start แแแขแ แแแ แแแแแแงแฃแ แแแ แกแ แฃแแแแ แแแแแแแขแฃแ แ แแ 1 แฌแแแแ แแแแแแแแ.
แแกแแแ แฆแแ แก แแแแก แแแแแขแแแ, แ แแ แแแแฃแแแกแฎแแแแแ, Firebase แแแแแแแแก แจแแขแงแแแแแแแแแก, แแฃ _app_start-แแก แกแแจแฃแแแ แแแแจแแแแแแแ 5 แฌแแแก แแฆแแแแขแแแ. แแฃแแชแ, แ แแแแ แช แแฎแแแแแ, แแฅแแแ แแ แฃแแแ แแแแงแ แแแแ แแแแก, แแ แแแแ แจแแฎแแแแแ แแ แแแ แแแแแ แจแแแแแฌแแแ แแแ.
Realm แแแแแชแแแแ แแแแแจแ แแแแกแแแฃแแ แแแฃแแ แ แแ แแ แแก แแก, แ แแ แแก แแ แแก แแ แแ แแแแชแแฃแ แ แแแแแชแแแแ แแแแ. แแแแแงแแแแแแก แกแแแแ แขแแแแก, ORM แแแแแฌแงแแแขแแแแแแแแก แแกแแแแกแแแแกแ แแ แแแแแฅแขแแแแก แแแแแแจแแ แแแแก แแแฃแฎแแแแแแ, แแแก แแ แแฅแแก แแแกแแแแฃแ แ แฌแแจแแ.
แแฃ แแก แแฎแแแแแแแแแจแ แแ แแแแฆแแแ, แแแจแแ แแแแฃแแแแฃแแ แแแแแฅแขแแแ แแแแ แแแแแแ แแ โแแแแแแแแกโ. แแแแแชแแแแ แแแแ แแฃแแแแแแ แแแแแ แแแแ, แ แแช แแแแแก แแฎแ แแ แแแกแแฎแแแ แแแแแแแชแแแก แจแแแแแแแแแ แแ แแแจแแแแแแ.
แแ แแแแฃแแแแ แ แฉแแแแ แแแแแชแแแแแแ แแแแก แจแแกแแฎแแ, แแฃ แ แแแแ แกแฌแ แแคแแ แแแแแแแแแ แแแแแฅแขแแแแก แแแกแแแแแก แฌแแจแแ Realm-แจแ, แ แแแแแแช แฏแแ แแ แแ แแก แแแแแกแฃแแ, แแแแ แแ แแแแแ แแแแ แฎแแแแ แกแแฃแแ แแแแ
แแแฃแฎแแแแแแ แแแกแแฃแกแแแกแ แแ แคแฃแแฅแชแแแก แแแ แแแฃแแแแ แแแ แแแแแแแก แจแแกแแฎแแ, แแแกแแแแแก แฌแแจแแแก แแ แแ แกแแแแแ Realm-แจแ แแแแแแแ แแแแแแแแ. แแฃ แแฅแแแ แฅแแแแ แแฎแแ แแแแแแแชแแแก, แแแจแแ แแแแแแแแแกแฌแแแแ แแก. แแ แแฃ แฃแแแ แแงแแแแแ Realm-แก, แจแแแแแฌแแแ แแฃ แแแฅแแ แแกแแแ แแ แแแแแแแแ.
แฌแงแแ แ: www.habr.com