package Ġcom . example . prototype . database Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . database . sqlite . SQLite Database Ċ import Ġandroid . database . sqlite . SQLite Open Helper Ċ import Ġandroid . provider . Base Columns Ċ import Ġandroid . util . Log Ċ import Ġcom . example . prototype . Expense Ċ Ċ object ĠFeed Reader Contract Ġ{ ĊĠĠĠ Ġ// ĠTable Ġcontents Ġare Ġgrouped Ġtogether Ġin Ġan Ġanonymous Ġobject . ĊĠĠĠ Ġobject ĠFeed Entry Ġ: ĠBase Columns Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTABLE _ NAME Ġ= Ġ" Expense " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCOLUMN _ TYPE Ġ= Ġ" type " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCOLUMN _ NAME Ġ= Ġ" name " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCOLUMN _ PRICE Ġ= Ġ" price " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠCOLUMN _ DATE Ġ= Ġ" date " ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġconst Ġval ĠSQL _ CREATE _ ENTR IES Ġ= ĊĠĠĠ Ġ" CREATE ĠTABLE Ġ${ Feed Reader Contract . Feed Entry . TABLE _ NAME } Ġ(" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Base Columns ._ ID } ĠINTEGER ĠPRIMARY ĠKEY ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Feed Reader Contract . Feed Entry . COLUMN _ TYPE } ĠTEXT ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Feed Reader Contract . Feed Entry . COLUMN _ NAME } ĠTEXT ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Feed Reader Contract . Feed Entry . COLUMN _ PRICE } ĠREAL ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ Feed Reader Contract . Feed Entry . COLUMN _ DATE } ĠTEXT )" Ċ Ċ private Ġconst Ġval ĠSQL _ DELETE _ ENTR IES Ġ= Ġ" DROP ĠTABLE ĠIF ĠEXISTS Ġ${ Feed Reader Contract . Feed Entry . TABLE _ NAME }" Ċ Ċ class ĠFeed Reader Db Helper ( context : ĠContext ) Ġ: ĠSQLite Open Helper ( context , ĊĠĠĠ ĠDATABASE _ NAME , Ġnull , ĊĠĠĠ ĠDATABASE _ VERSION Ċ ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( db Ġ: ĠSQLite Database ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdb . exec SQL ( SQL _ CREATE _ ENTR IES ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Upgrade ( db : ĠSQLite Database , Ġold Version : ĠInt , Ġnew Version : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġdatabase Ġis Ġonly Ġa Ġcache Ġfor Ġonline Ġdata , Ġso Ġits Ġupgrade Ġpolicy Ġis ĊĠĠĠĠĠĠĠ Ġ// Ġto Ġsimply Ġto Ġdiscard Ġthe Ġdata Ġand Ġstart Ġover ĊĠĠĠĠĠĠĠ Ġdb . exec SQL ( SQL _ DELETE _ ENTR IES ) ĊĠĠĠĠĠĠĠ ĠonCreate ( db ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Down grade ( db : ĠSQLite Database , Ġold Version : ĠInt , Ġnew Version : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Upgrade ( db , Ġold Version , Ġnew Version ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġyou Ġchange Ġthe Ġdatabase Ġschema , Ġyou Ġmust Ġincrement Ġthe Ġdatabase Ġversion . ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDATABASE _ VERSION Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠDATABASE _ NAME Ġ= Ġ" Expense Reader . db " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġextract All Except Date ( db : ĠSQLite Database ){ ĊĠĠĠĠĠĠĠ Ġval Ġprojection Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBase Columns ._ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFeed Reader Contract . Feed Entry . COLUMN _ TYPE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFeed Reader Contract . Feed Entry . COLUMN _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFeed Reader Contract . Feed Entry . COLUMN _ PRICE ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠFilter Ġresults ĠWHERE Ġ" title " Ġ= Ġ' My ĠTitle ' ĊĠĠĠĠĠĠĠ Ġval Ġselection Ġ= Ġ"${ Feed Reader Contract . Feed Entry . COLUMN _ TYPE } Ġ= Ġ? " ĊĊĠĠĠĠĠĠĠ Ġval Ġselection Args Ġ= ĠarrayOf (" B IL LS ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠHow Ġyou Ġwant Ġthe Ġresults Ġsorted Ġin Ġthe Ġresulting ĠCursor ĊĠĠĠĠĠĠĠ Ġval Ġsort Order Ġ= Ġ"${ Feed Reader Contract . Feed Entry . COLUMN _ PRICE } ĠDESC " ĊĊĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġdb ?. query ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFeed Reader Contract . Feed Entry . TABLE _ NAME , ĠĠ Ġ// ĠThe Ġtable Ġto Ġquery ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprojection , ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġarray Ġof Ġcolumns Ġto Ġreturn Ġ( pass Ġnull Ġto Ġget Ġall ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection , ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġcolumns Ġfor Ġthe ĠWHERE Ġclause ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection Args , ĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġvalues Ġfor Ġthe ĠWHERE Ġclause ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġgroup Ġthe Ġrows ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġfilter Ġby Ġrow Ġgroups ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsort Order ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġsort Ġorder ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġcounter Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġitem Ids Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġwith ( cursor ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( moveTo Next ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= ĠgetString ( getColumnIndex ( Feed Reader Contract . Feed Entry . COLUMN _ TYPE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= ĠgetString ( getColumnIndex ( Feed Reader Contract . Feed Entry . COLUMN _ NAME )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprice Ġ= ĠgetString ( getColumnIndex ( Feed Reader Contract . Feed Entry . COLUMN _ PRICE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// do Ġnot Ġneed Ġdate ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ids . add ("$ counter : Ġ$ type Ġ$ name Ġ$ price ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ++ counter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfor ( elem Ġin Ġitem Ids ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Logger ", Ġelem ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcursor . close () ĊĠĠĠ Ġ} Ċ }