ááá á°á áááá˝ á ááŁáá á áááŹá˝áá˝ ááľáĽ á ááĽááľ ááľááá áĽá ááá˝ á°áŞ UIá áĽáá° á ááŁá áááľáłáᢠá áááŹá˝á ááááá á¨á á áá á¨áá°á° á°á ááá ááá áĽá áá áłá¨áľ ááááŤáᢠá áááŹá˝áá áá áá á¨áááአá ááľ á¨á°áá áá˝á áááľ á ááá ááŤá áášáľ ááá á°á áááá áá á áá ááŤáĄ áá˝ááá˘
á¨áśáś áá áá°áá áŞáŤ á á ááŤá ááááá 3 á°á¨ááľ áĽáá°ááá áĽá áá ááłááľ "áĽáľááá˝" á¨15-20 á°á¨ááľ áĽáá°áááľáľ á°áá°áá áłáá˘
á¨ááá¨áĄ á áłá˝ á áľá°áłá˝ áá¨á¨áť áŤáá áłáŞá áá-áľá áŞáá¨á á¨ááἠááł áĽáľáᾠᣠá¨ááľáłááť áá°áľ ᣠá¨áá áááá˝á áĽáá´áľ áĽááłá¨áá˝ áĽá á¨á፠áĽáŤáłá˝áá á°áĽáľá á áááá ááá á áľá°áŤááááá˘
á¨á˝áá á°áŤá˛áĄ-áááľá áŤáşááŞá - á ááľáŽááľ ááᢠá áśáś ááá˘
á¨áááá¨áť á áśáá á á áŤá°á¨ááľ á áá á¨ááááŞáŤá áĽáá áľáá´ () áá á¨ááá áľ áá ááᎠáĽáľá¨ áá¨á¨áťá áá¨á¨áť áľá¨áľ áŤáá áśáľáľ á°á¨ááśá˝ ááᢠáĽá áá ááłááľ á°á áááá˝ á¨á áá áá á¨15-20 á°á¨ááľ á°ááˇáᢠáá áĽáá´áľ ááá áá˝áá?
áááá ἠáá áááá¸á á áŁá á áá áá áááŤ
á¨áĽá á¨áŞáá¨á áłáłá¤á áŤáááá¨áĽ á áľááᢠá ááłááľ á¨áá áááá˝ á áá°á°á¨ááᣠááá áá áŤáááá¨áĽ áá¨ááš áá áᢠá¨áá°áá áŞáŤá á
áá áá ááľ á ááľ á¨ááŻáᢠá¨á፠á áľá°áŤááááá, áĽá á¨á
ááŹá áá áá° áááá áᣠ- ᨠ1 á°á¨ááľ áŤáá° áĽá á¨á፠á áá á áá¨áá¨á. á˝áá áľá áááłá ââáľáá°á áĽá áááľ áááľááá˝á ááá - ááŁá áĽá á¨á°ááá°.
á¨á˝ááŠá ááá áĽá áľáá°á
áᏠááááá á¨ááŁáá áá°áá áŞáŤ á ááĽááľ áááá áĽá ááá˝ á°áŞ ááá á áá áľá˘ áá áľá ááŁáá áá°áá áŞáŤ áĽáť á áá°áá. á¨á ááľ á áááááľ áĽá áŠáŁá፠áá á¨áááááľ á¨á°á áá áááľ ááľáĽáľáĽ ááá ááᢠáááłá, á áĽá áááł, á¨áááŞáŤ ááĽááľ ááá á áááááľ ááá á áááŤážá˝ á ááą áá. áá á¨áĄ ááŁá á¨áá ááłá áľáŠáľ áááá, áĽá á áá áááἠá¨áááá á°áá á áĽá áá á á á áááá áľá. ááá°áá áŞáŤá, á á°áŤá, á¨ááŁá á áááááľ áľááľ ááá á á áľááá áá, ááááŤáąá á áááŹá˝á ááááá 20 á°á¨ááľ áĽáť á¨áááľáľ á¨áá ááłá áá áŤá á áá á á á ááĽááľ?
ááááŞáŤ áá áĽá áĽáŤáłá˝á á ááłááľ áá á áááŹá˝á ááááá áááľ á´áŽááśá˝ áááľáłá áĽá á¨á፠ááá áŤá á áá áĽáá°áá°á° á¨ááá˝ áŁáá°á¨áŚá˝ á áŹáłáá˝á ááľááľ áááá ᢠáá áá áá áááł á á°á¨áłáłá ááľáá á ááťáááá˘
áĽáľá¨ááź áá? á ááŽáá˛áá áś
áá áááá¨áťá ááááá á áŁá á áŁá á áŁá á¨á
á áá áĽáá°áá°á° á
áŹáłáá˝ ááłá¨áľ áááŠ! ááááá, "á áŁá, á áŁá á¨á
á" áá áĽáá°áá ááááŤáľ áá°áá. áĽá ááá
á¨Firebase trace á°á áááá˘
áá
áá°á á áąáŤ á°á ááá á áááŹá˝áá á á¨áá°á áľ á
á˝á áľ áĽá á¨ááááŞáŤá áĽáá
áľáá´ á¨á°ááá¨á áľ() áá áŤááá áá áááŤáᢠá Firebase Console ááľáĽ áá
áááŞáŤ _app_start ááŁááᢠáĽáá˛á
ááá˘
- á¨95á ááá°ááłáá á áá ááá á°á áááá˝ á¨á áá áááá˝ áá° 20 á°á¨ááľ á¨áá á áá¸á (á ááłááśá˝á á¨á áá áá¨ááá)ᣠááá áĽááłá ááŤá¨ááá áááá á¨á áá áá á¨5 á°á¨ááľ á áłá˝ á˘áááá˘
- á¨áááť ááá áá áĽá´áľ á áá°áá, ááá áá á áá ááľáĽ áŤáľáá. ááá áá á ááłááľ áá á áĽáłáá˝ á á. á¨áľááłá ááŹáąá áá° 90 áááľ áľááłáľá áá áá ááľá á ááá°ááá˘
áááľ ááłáŚá˝ áá° á áĽáᎠááĄá˘
- á¨áá ááá áĽá¨áá°á° ááá˘
- áá "á¨áá ááá" á¨á°ááá á áá áĽáá°áá ááááŤá áĽá áĽáá°áá áááľáłáá˘
"ááááŁáľ á¨áá¨á ááą áá á¨áá ááá á á" áĽáá á á°áĽá áĽá áá áá ááᢠá ááááŞáŤáŁ á¨áá¨á ááąá áĽáá° áá¸á፠áĽáá ááááᤠá áľá°áľ áá áĽáá¸áłáááᢠá ááá°á á°á¨á, á áááŹá˝á á˛ááá á¨ááἠááł ááŤáá. ááá ááá á ááľ áá ááŁáŁáá.
á áŞáá¨á áłáłá¤á áá áá á˝áá á áá áľ?
á¨ááἠááłá áááśá˝ á áá°áá áŞáŤá á
áááľ ááľáĽ áĽáá´áľ áĽáá°áááááĄ, á¨ááááŞáŤá áááľ áĽá á áááľ áĽá
á áá á áááá áľ áá á°á¨á᪠áá¨ááἠáááá. á¨áŞáá¨á áłáłá¤á áááśá˝á á á áŠá áá¨áľ áľá˝ááá
adb exec-out run-as ${PACKAGE_NAME} cat files/${DB_NAME}
á á°ááŤáŠ áááŤáľ á¨ááἠááłáá áááśá˝ á¨á°ááá¨áľá, á¨á ááľ á¨á°áá°á á áááľ áĽááá˝ ááĽá á á¨ááá áĽá¨á¨áᨠáááá á°áá°áá áłá.
áľáá ááááľ áááá˝ á¨áŞá áľáąá˛áŽá ááŤá áŤáłáŤá-á á፠á áŠá - á¨áá°áá áŞáŤá áá á¨áľ á¨á°áŤá á¨á°áá°á áá á áá ᣠá áá á áŠá - á áááľ á¨á°á áá á ááᢠá¨áááŽá˝ áĽááľ ááłá áá˝áá ImageEntity
и MoneyType
á á¨áá°á áááł á áľáá (á¨á
á˝á áłá áá˝ áĽááłá á¨áĽáŤááłááąá á áááľ áĽááá˝ áĽááľ áŤáłáŤá).
á áá¨á ááľ áĽáľááľ áĽá á á áá áá ááŤá¨á áŤáá áááááľ
ááĽáĽá áŤáá°á°á¨áá áľ á¨ááἠááł áĽáľááľ á áŁá ááĽá ááᢠáá áá á áá°áá áŞáŤá á áá áá áá áá á°á˝áá áŤáłáľáŤá? áá áá á ActivityManager á áŠá áááŤáľ á áŁá ááá ááᢠá¨á ááľáŽááľ 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 áᣠáŤá°áá á áá¨á ááą áá á áĽá áĽáľááľ ááŤá¨á áŤáá áááááľ á°ááłáłá á°ááĽáŽ áá á. á á á ááá ᣠá¨áá á áá (á áááá á
áá áĽáľááľ) ᣠá¨áá°áá áŞáŤá ááľáááŞáŤ áá áĽá á¨ááἠááłá áá á á¨ááŻáᢠá áĽáá˝á áá ááááľ á ááᢠá áá á¨áá¨á áĽááááąá áá¨ááἠáĽáť áá áᢠáľááá
, "ááłážášá" áááľáááľ ááľááá áĽá áá
á
ááá áŤááĽááá.
ááá፠áááá á¨ááἠááł áĽáľááľ ááááŤáśá˝
"ááłážá˝á" á¨ááľáááľá á ááľ á ááááŞáŤ ááá áĽáá°áłáŠ áá¨áłáľ á áá áá. áá áá áááľá¨á, áŞá áá áĽáá°áá áĽááľáłááľ.
áŞá áááááľ áŤááá á¨ááἠááł ááᢠá á ááľáŽááľ áá áá áŤá á ᨠORM áááááľ áłáłá¤á áĽáá°á°áááá á áááŽá˝ ááŤá¨á áŤááá áááááľ á á°ááłáłá ááአáĽáá˛áááš áŤáľá˝áááłáᢠá á°ááłáłá áá, Realm á áľááš á¨ááἠáĽá á¨áŤááł áľáŤáá˝ áĽááá˝á á ááĽáł á áá á°á¨ áľááľáł ááľáĽ áŤá¨ááťá. áá áá¨áá á¨á˛áľá á ááĽááľ áĽáá˛áŤáᥠáŤáľá˝áááłá, áá á á¨áŞáá¨á áĽááŤáŹ áĽá ááá áĽáá°ááá°áľ áá.
(ááá
á˝áá á áá áá
ááá፠áá áááᥠáľá áŞáá á ááááá áá á¨á áá ááá ἠáľá˝ááá
áĽá ááá˘áá˝ á á°ááá á¨ááἠááłáá˝ (áááłáᣠORM áłáłá¤á ᨠSQL áá) á¨á áá ááľáŤáľ ááá°ááᢠáĽá áĽáá° á¨ááἠáá°á¨áá á¨ááłá°á áááŽá˝ áĽááá áá á¨á°á°áĄ áááľááᢠá áŞá ááľáĽ áá á áá°áá.
á áááŤá˝á áá á¨áŤáľáŹáľ áá°á¨á áŁá
áŞá áá¨á
á áá á°á áááᢠáá
áłáá°áá á¨ááἠááá°áľ
á ááá áľ á¨áŤáľáŤá˛áá á°áá áá á¨á°áአáá¨áá áĽáá´áľ á áľááá áááľáłá? á¨áŞáá áááá˝á á¨ááá á¨áá áá°á¨á á ááŁá¸áá˘
á ááľ (á¨áá áá°á) áĽááá°á ááłá áĽáááá¨áľá˘ áĽá á ááᢠ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()) á¨á°ááłáłáŠ ááłáá፠áá áŤáľááŁá áá
ááá áá á áá áááá áŁáᢠááá áá ááá á¨ááľáĽ áĽááá˝ (ááľáᣠáá ááľEntity áĽá cartComboProducts) á¨ááá
áá áŤááá áááááľ áŤáŁá áĽá á áá¨á ááą ááľáĽ áááŤáá˘
á¨ááą áá áŤáá áááááľ áľáá á á¨á áá á áá á áááĽáŁá¸áá ááá á áá°ááá¸áá (á ááá˝ áŤáá°á¨áľáá¸á ááá áááá "á á¨á´á" áŤáá¸áłá á áľá°áá)ᢠáá áá "á¨ááľáłááľ áááŁááá˝" áĽáááá.
á¨áŞáá áá áľáá°áŤ á¨áĽáá°áá á áááľ áľáŤáá˝ á ááľ áááá á áŤááľ á ááá ááá áĽá áááá ááá á ááá áá°á¨á á ááĽáᢠáá á ááľá¨á ááťáá, áááłá, áĽáá°áá :
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()
}
// и пОŃОП ŃМо ŃĐžŃ
ŃĐ°Đ˝ŃоП
áá á áŤá°á¨á, ááá ááá áĽáá° áááłá ââáá°áŤá. á áá ááłáᣠá ááľáᣠáá ááľEntity áĽá 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
áááá ááá˝ áĽáá° á ááŁá áááá áĽááááłáá. áĽá áĽáŤááłááą áá
ááá á¨NstedEntityAware á áááá˝á áá°áá á áá˝ááᣠáá
á á¨áá°áá ááľáŁá á¨áŞááá˝á áĽááá˝ áĽááłáá áŤáłáŤáᣠáááłá 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
á¨NstedEntityAware á áááá˝á á áá áá áááá á¨áá áááá˝á á á°á°ááá áŤáľáááłááĄ-
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()
}
}
}
áá á áŤá°á¨ááá á áŁá á ááĽááľ á áá°á áá áŁá áááŽá˝ áá áĽá áá áĽáá°á°áá ᨠá á¨áááĽáá˘
á áá¤áąá, á áá
áááľá á¨á¸áááá¸á áĽááá˝ áá°á á áá. áĽá á¨áá á¨áą á á ááá áĽáľááľ áááˇá ᣠáá á ááááá˘
"á¨á°ááá°á" áááľá
áá°á¨áą ááľ áĽá áá°á á˘áááá á ááá á áľááᢠáľááá á¨á áá áááá¨áľ ááááᢠá¨áĽá ááŽáááľ á áŞá ááľáĽ á¨ááἠáá¸á፠á áŁá á áááľ áá áááᢠáľááá ááĽáŤááłááą ááá áááá á¨áá áĽááá˝ ááá ááá áľá á¨áá áá áá, á á°á¨ááŞá á¨áľá á°áśá˝ áľááľ áá¨ááŤá, ááááŤáąá áŽáľá á ááááŠá áľ áá áĽááá˝á áááá˝ áááłáľ áá˝áá.
á áááážá˝á áĽááłáá ááአáá¨ááἠááá áá á, ááá áá ááá ááá á áŤáą áĽáá°áá°áŤ.
á ááľ ááá á áŤáą áĽáá˛á ፠áľáááá, áá¸áĽáŤá á áá áá á ááĽá. áá áá áááľá¨á á áĽáŤááłááą ááá ááľáĽ ááá áĽá á¨áŞá ááá ááá á¨áááŽá˝ áááá áááá áá¨ááἠáĽáá˝ááá-
RealmModel::class.java.isAssignableFrom(field.type)
RealmList::class.java.isAssignableFrom(field.type)
ááľáŠ RealmModel ááá RealmList á¨áá áŁá¨áá á ááľá ááá áá° áá áááá˝ áááá áŤááᢠááá ááá áá á¨áá áĽááłá°á¨ááá á ááľ á áááľ áá, áĽáá áĽáť á áŤáą áá¨áááá. ᨠCascade áá°á¨á áá´ áŤáą á áŁá ááá áá áĽá áá á áááľááá˘
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
ááááŤáąá á¨á°ááŤáŠ á¨ááá
áááŽá˝ á ááľ á áááľ áá áááŤá¸á áľááá˝áᢠá áłá˛áľ áááŽá˝á á áááĽáŠá áľ áá áá
áá ááľáááľ áĽá á ááá ááłáá፠á áŤáľ-á°á ááá á á¨á°áťá ááá˘
á¨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)
}
á áá¤áąá á á°áá á áŽáľ ááľáĽ ááĽáŤááłááą á¨ááἠááťáťáŤ ááá "cascading delete" áĽáá áááá. áááłáᣠá¨ááľááŁáľ ááá áá á áááľááá˘
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
á áłá˛áśá˝á á¨ááťáá á ááľ áááá á¨á°á°á á°áĄ áááŽá˝á á á¨ááá áá°áááᢠá áá°áá áŞáŤá ááľáĽ áá
áá áá´ áĽáá áááá. á áŞáá¨á ááľáĽ áŤá á¨áá
á°á¨ áľááľáł ááłážá˝ áá á áá á áá°ááᢠá áá°áá áŞáŤá áááá á
áá áĽááľ áá á¨á
áá áá áĽááááľ á°ááłáłá áááŞáŤ áŤá°á¨áá áá¤áąá áĽááŤááá˘
á á¨ááá´á ááľáá á¨áá áááá˝á á áŤáľ-á°á áŤáľáŹáľ á áá°á¨áá áľ áá á¨áá°áá áŞáŤá á
áá áá á áááá á
áá áĽááľ áá áŤááá áĽáá áŤáłáŤáá˘
áá¤áśá˝ áĽá áá°áá°ááŤáá˝
á¨áá áá° áá áĽáŤá°á á¨ááŁá á¨áŞáá¨á áłáłá¤á á áááŹá˝á á áŁá á áááł áĽáá˛ááá áĽáŤá°á¨áá ááᢠáĽá á áŤáłá˝á "áŤáŤá˛áá ááĽááľ" á¨áá áááá˝ ááá á ááĽá°ááᢠáĽá á áá ááłááŤá˝á áĽáá´áľ á¨áá°áá áŞáŤáá á áá áá á _app_start áááŞáŤ áá áĽáá°ááŤá áĽáááŁá áŤáá áĽá áĽáááááááá˘
ááá°áá°áᣠá¨90 áááľ áá ááľá°á áĽááŤááᥠá¨áá°áá áŞáŤá ááľáááŞáŤ ááᣠáá˛áŤá áĽá á 95 á ááá°ááłáá á°á áááá˝ áá á¨áá°áá°áᣠáĽá¨ááá° áááŁáľ ááá¨á˘
á¨á°áŁáľ áá áá áłáá á¨á°ááá¨áąáŁ á¨_app_start áááŞáŤ áá ááá á á áááľáá áĽá á¨1 á°á¨ááľ áŤáá° ááá˘
áĽáá˛áá á ááŁáŞááľ á¨_app_start á ááŤá áá á¨5 á°á¨ááľ á áá á¨áá áá¨áá¤á ááłáááŤáá˝á áĽáá°ááá áá¨á á áá ááᢠááá ááᣠáĽáá°ááá¨áᣠá áá áá áá°ááá á¨ááĽá áᣠáááááľ ááĽá°á á ááá˝ á á¨áááĽá˘
á¨áŞáá¨á áłáłá¤á áአááá áááááłá áŤááá á¨ááἠááł ááá ááᢠááá áĽááłá á¨á á ááá áááááľáŁ á¨áŚá áá¤á áááľááá˝ áá á°ááłáłáááľ áĽá á¨áááŽá˝á áááááľ á˘ááľáá á¨áŤáľáŹáľ áľá¨á á¨áááá˘
áá á¨áááľ ááľáĽ á¨áááᣠá¨áá ᣠá¨áá áááá˝ áá¨ááťá áĽá âáááłáâᢠá¨áá¨á ááą áŤáááá¨áĽ áŤáľááᣠáá á°áá á¨áá°áá áŞáŤáá ááááá ááá á áá áá á°á˝áá áŤáłáľáŤáá˘
áĽáľáŤáá á¨áłáĽá áŤááᣠááá áá áá¨á
á áá á˛ááá á¨áá¨áá á áŞáá¨á ááľáĽ áŤá áááŽá˝á á ááĽááľ áĽáá´áľ ááĽááľ áĽáá°ááťá áááłá˝áá á áŤááŤáá
ááá áĽááłá á¨áá
áŁá
᪠á
áἠáá˝áł áá ááááľ á˘á°á¨áá, á áŞáá¨á ááľáĽ á¨áŤáľáŹáľ áľá¨á á áááá á ááľá áá¨áááá. á á˛áľ áá°áá áŞáŤ áĽá¨áá°á á¨ááᣠáá
á áááľ ááľáĽ áŤáľááĄá˘ áĽá ááľááá áŞááá áĽá¨á°á áá á¨áá, áĽáá°áá
á áááľ á˝ááŽá˝ áŤáá áááľ áŤá¨áááĄ.
ááá: hab.com