This course will be retired on June 1, 2025.
Heads up! To view this whole video, sign in with your Courses account or enroll in your free 7-day trial. Sign In Enroll
Preview
Start a free Courses trial
to watch this video
In this video we'll see how to get access to the database!
Related Links
Related Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign upRelated Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign up
[MUSIC]
0:00
We've just finishing
building our database.
0:00
Now, to finish up the app,
we just need to connect it to the UI.
0:07
We'll start by updating the save
button and creator activity.
0:10
And by the end, we'll have the UI updating
itself whenever anything changes.
0:14
The first step to using our database
is to retrieve an instance of it.
0:21
Rather than retrieving our
database all over the place,
0:25
let's just get it done once in our
application's onCreate method, and
0:28
then make it available to
the rest of our project
0:32
by declaring that variable outside of the
class to scope it to the entire project.
0:34
Let's go ahead and
close the files we have open.
0:40
And then head over to the app file.
0:44
And below our toppings array
let's create a new lateinit var
0:48
named db and
give it a type of pizza database.
0:53
Then down in onCreate let's
add a line at the top and
0:59
set db equal to a new instance
of our pizza database.
1:04
So Room.databaseBuilder,
1:09
we'll pass in the context,
which is just applicationContext.
1:14
Then the database class
PizzaDatabaseclass.java.
1:19
The name of the database which is
1:24
"PizzaDatabase").build().
1:28
Great.
1:34
Now whenever we want to access
our database we'll just type, db,
1:35
and be done with it.
1:39
Now another thing we'll want
to do in this onCreate method
1:41
is add our toppings to the database.
1:44
Since we've already got a loop
going over the toppings list,
1:46
let's just insert each of these
toppings to the database.
1:51
So let's just add db.toppingDao.insert.
1:57
And pass in the topping.
2:03
Then, just to double check things,
let's try running the app.
2:06
Don't forget to select app from the drop
down at the top before running it.
2:09
Once it runs,
it looks like we got an error.
2:18
And if we look in the logcat, And
2:22
filter by errors, We can find the error.
2:28
Cannot access database on the main thread
since it may potentially lock the UI for
2:36
a long period of time.
2:41
To fix this, every time we access our
database we need to do it on a new thread.
2:43
Let's add a line above our foreach loop
and then wrap it inside a thread block.
2:50
If you've not used Kotlin before this
is just a nice shortcut to let us
3:01
quickly create new threads.
3:06
Now let's try running the app again.
3:09
Okay?
3:16
Looks like we're getting a UNIQUE
constraint failed on our Topping.id.
3:23
And if we look back at the app class we
can see that each time we run the app
3:29
we're inserting the same
toppings each time.
3:34
Or rather we're trying to insert them.
3:38
But it's not letting us because these
toppings are already in the database.
3:41
To fix this let's head
over to topping dow.
3:45
And after the Insert annotation,
let's add () and
3:54
then specify an on conflict strategy.
3:58
onConflict = and let's set it =
4:01
OnConflictStrategy.replace.
4:05
Now if we try to insert the same topping
twice instead of throwing an error
4:11
it will just replace
that row in the database.
4:17
Perfect.
4:19
Let's try running the app again.
4:20
And there we go.
4:29
The app ran successfully.
4:30
Now that we've got our database
ready with our toppings,
4:32
we can handle saving
pizzas in the next video.
4:35
You need to sign up for Treehouse in order to download course files.
Sign upYou need to sign up for Treehouse in order to set up Workspace
Sign up