package Ġcom . my . delivery . delivery list . storage Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . room . Database Ċ import Ġandroidx . room . Room Ċ import Ġandroidx . room . Room Database Ċ import Ġandroidx . room . Type Converters Ċ import Ġcom . my . delivery . R Ċ import Ġcom . my . delivery . delivery list . model . Delivery Ċ Ċ @ Database Ġ( entities Ġ= Ġ[ Delivery :: class ], Ġversion Ġ= Ġ 1 ) Ċ @ Type Converters ( Converters :: class ) Ġ// Ġusing Ġtype Ġconverter Ġto Ġparse Ġobject Ġas Ġjson Ġwhile Ġstoring Ġin Ġdatabase Ċ abstract Ġclass ĠApp Database Ġ: ĠRoom Database () Ġ{ ĊĠĠĠ Ġabstract Ġfun Ġdelivery Dao (): Delivery Dao ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSingleton Ġprevents Ġmultiple Ġinstances Ġof Ġdatabase Ġopening Ġat Ġthe Ġsame Ġtime . ĊĠĠĠĠĠĠĠ Ġ@ Volatile ĊĠĠĠĠĠĠĠ Ġprivate Ġvar ĠINSTANCE : ĠApp Database ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġsingleton Ġinstance Ġof Ġthis Ġclass ĊĠĠĠĠĠĠĠ Ġfun Ġget Database ( context : ĠContext ): ĠApp Database Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Instance Ġ= ĠINSTANCE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( temp Instance Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtemp Instance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcreate Ġa Ġroom Ġdatabase Ġinstance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstance Ġ= ĠRoom . database Builder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . application Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Database :: class . java , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . database _ name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). allow MainThread Queries (). build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠINSTANCE Ġ= Ġinstance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }