Ես ունեմ ցուցակ (սենյակի տվյալները) ինչ-որ տարրով և ցանկանում եմ թարմացնել տվյալ տարրի տվյալները: Օրինակ, ես ունեմ այսպիսի ցուցակ.
[
{
"id": 1,
"mptId": 12,
"value": 0 // the default value it's 0 / null but I showed in the app with 0 not null
},
{
"id": 2,
"mptId": 12,
"value": null // the default value it's 0 / null but I showed in the app with 0 not null
},
{
"id": 3,
"mptId": 12,
"value": 0 // the default value it's 0 / null but I showed in the app with 0 not null
}
]
Այնուհետև ես ուզում եմ թարմացնել value
-ը ցուցակում, ըստ mptId
-ի:
Ես արդեն ստեղծել եմ Դաոն այսպես.
@Query("UPDATE table_data SET value=:value WHERE mptId=:mptId")
fun testUpdate(value: Int?, mptId: Int?)
Եվ հետո, իմ ViewModel-ում այսպես.
val list = _currentSource.value as List<SourceDanaInvestasi>
viewModelScope.launch(IO) {
try {
for (i in list) {
repository.updateTest(i.value, mptId.get()) // i.value that I want update, mptId that where clause
}
} catch (e: Throwable) {
Timber.e("Error update investment fund : ${e.message}")
}
}
Օրինակ, հավելվածում ես կթարմացնեմ value
-ը ցուցակում այսպես.
[
{
"id": 1,
"mptId": 12,
"value": 10 // I edited from apps, the value from 0 to 10
},
{
"id": 2,
"mptId": 12,
"value": 10 // I edited from apps, the value from 0 to 10
},
{
"id": 3,
"mptId": 12,
"value": 20 // I edited from apps, the value from 0 to 20
}
]
Բայց երբ ես ցուցադրում եմ ցուցակը խմբագրումից հետո, արդյունքն այսպիսին է.
[
{
"id": 1,
"mptId": 12,
"value": 20 // the value replaced by the last value
},
{
"id": 2,
"mptId": 12,
"value": 20 // the value replaced by the last value
},
{
"id": 3,
"mptId": 12,
"value": 20 // the value replaced by the last value
}
]
value
-ը միշտ փոխարինվում է հավելվածներից վերջին value
-ով: Ինչպես տեսնում եք, ես հավելվածից խմբագրել եմ 10, 10, 20
-ով, իսկ հետո վերջին արժեքը 20
է, ուստի ցուցակի բոլոր value
-ը նույնպես փոխարինվել են 20
-ով: Ինչու՞ դա տեղի ունեցավ:
Եվ, երբ ես խմբագրեցի ցուցակը հավելվածից այսպես.
[
{
"id": 1,
"mptId": 12,
"value": 0 // the value still 0 or I didn,t edited from the app
},
{
"id": 2,
"mptId": 12,
"value": 0 // the value still 0 or I didn,t edited from the app
},
{
"id": 3,
"mptId": 12,
"value": 20 // I only edited this value from 0 to 20 in the app
}
]
Երբ ես այդպես խմբագրել եմ, բոլոր ապրանքների ցանկը չի թարմացվել, ես արդեն կարգաբերում եմ այն և տվյալները, որոնք թարմացվել են, բայց չեն պահպանվել սենյակում, դա նշանակում է, որ ամբողջ ցուցակը պետք է խմբագրվի, որպեսզի այն կարողանա պահել սենյակում: Ինչու՞ դա նույնպես պատահեց:
Այսպիսով, իմ հարցն այն է, թե որն է լավագույն պրակտիկան թարմացնելու տվյալները ցուցակից՝ օգտագործելով սենյակի որոշակի դաշտ, ինչպիսին mptId
է:
Fyi, id
դա առաջնային բանալին է ավտոմատ ստեղծմամբ, mptId
դա օտար բանալի է, և value
դա այն է, ինչ ես ուզում եմ խմբագրել հավելվածից:
mptId
, ապաid
, դա պայմանավորված է այս աղյուսակի առնչությամբ մեկ այլ աղյուսակի հետ: Այսպիսով, երբ ես խմբագրում եմ մեկ այլ աղյուսակPK
-ի հիման վրա, բայց այս աղյուսակում ես խմբագրում եմFK
-ի հիման վրա (mptId):PK
այլ սեղանների վրաFK
է այս աղյուսակում: 18.05.2020value
-ը միշտ նույն գրառումն է, չի տատանվում՝ կախված հավելվածի մուտքագրումից: Նկատի ունեմ, որ հավելվածում ես խմբագրել եմ բոլորvalue
-ըmptId=12
-ով0
-ից10,10,20
, իսկ հետոvalue
-ը20,20,20
է: Դա պետք է լինի10, 10, 20
, ճիշտ է: 18.05.2020value
-ը հավելվածից այսպես,10,0,20
(0 դա նշանակում է, որ ես չեմ խմբագրում այն):value
-ը խմբագրված չէ, դա նշանակում է, որ բոլորvalue
ները միշտ պետք է խմբագրվեն: Այսպիսով, սա նույնպես իմ խնդիրն է: Եվ այո, դուք կարող եք նորից կարդալ իմ հարցը իմ խնդրի մասին: 18.05.2020SourceDanaInvestasi
մոդելում այն API-ից է և չուներid
(հիմնական բանալի), քանի որ այն API-ից է: Եվ իմ ցուցակի օրինակը, այն մեկ այլ մոդելից է (սուբյեկտ)id
-ով PK է և ավտոմատացված է: Այսպիսով, հոսքը այսպիսին է. Նախ, ես բացում եմ էջը և ստանում տվյալներ API-ից, այնուհետև վերադառնում եմ նախորդ էջ՝ պահպանելով բոլոր տվյալները API-ից (SourceDanaInvestasi
-ից մինչև նոր մոդել/սուբյեկտ) սենյակ: Այնուհետև ես նորից բացում եմ այդ էջը, բայց առայժմ ստանում եմ տվյալները սենյակից (սուբյեկտից) ոչ թե API-ից, որովհետև prev-ն արդեն պահպանում է այն։ 18.05.2020list
-ը, այնուհետև բացեցի նոր էջ՝updated
տվյալներով: Իսկ ինչպե՞ս ստանալid
-ը for հանգույցում API-ից (SourceDanaInvestasi
), որպեսզի համապատասխանիid
-ին կազմակերպության կողմից որպեսPK
: Եթե տեսնում եք ձեր պատասխանը, մենք պետք է սահմանենքid.get()
, բայց ինչպե՞ս դինամիկ կերպով ստանալid
-ը կազմակերպությունից: Այսպիսով,query update
-ը կարող է իմանալid
-ը, որը ես համընկել եմ սենյակի տվյալները թարմացնելու ֆունկցիայի վրա: 18.05.2020list
միայն մեկ կամ ավելի տարրով: Այդ ցանկումusers
, ովքեր օգտագործում են հավելվածը, կարող ենedit
բոլոր տարրերը (values
) ցանկում կամ մասնակիորենwhere clause
-ով դաmptId
է, քանի որ դաPK
է մեկ այլ կազմակերպությունում (ծնող) ևFK
այս աղյուսակում: 18.05.2020lji_id
որպես տող:It's unique and will not be the same as other items and only applies to the same mptId
. 18.05.2020mptId
-ըwhere clause
-ի համար 18.05.2020lji_id
ևmptId
որպեսwhere clause
, դա աշխատանք է: Շնորհակալություն 18.05.2020