The FULL Beginner Guide for Room in Android | Local Database Tutorial for Android
In this video, you'll learn the ins and outs about Room and local databases on Android so you can get started implementing your own.
⭐ Get certificates for your future job
⭐ Save countless hours of time
⭐ 100% money back guarantee for 30 days
⭐ Become a professional Android developer now:
pl-coding.com/premium-courses...
Get my FREE PDF about 20 things you should never do in Jetpack Compose:
pl-coding.com/jetpack-compose...
💻 Let me be your mentor and become an industry-ready Android developer in 10 weeks:
pl-coding.com/drop-table-ment...
Subscribe to my FREE newsletter for regular Android, Kotlin & Architecture advice!
pl-coding.com/newsletter
Join this channel to get access to perks:
/ @philipplackner
Get the source code for this video here:
github.com/philipplackner/Roo...
Join my Discord server:
/ discord
Regular programming advice on my Instagram page: / _philipplackner_
Checkout my GitHub: github.com/philipplackner
You like my free content? Here you can buy me a coffee:
www.buymeacoffee.com/philippl...
Пікірлер: 189
IF YOU WANT TO FOLLOW THIS TUTORIAL STEP BY STEP, use these settings: Empty activity(jetpack compose, the purple one), min sdk 24, groovy dsl. IN build.gradle(module :app), target sdk 33. Use room 2.5.0, as the latest version needs target sdk to be 34. activity-compose should be 1.7.2, jvm target 17, compileOptions source an target java version 17. These setting worked for me, if you have build errors, read them through and correct the versions or just copy paste them into stack overflow. Commenting this cause I had a lot of issues with the versions conflicting.
@yuvarajg3195
7 ай бұрын
This information really helped in adding the dependencies to my files Thank you!
@twothreeoneoneseventwoonefour5
7 ай бұрын
if you have versions confilicting just use the latest versions always, problem solved
@DaveDivines
4 ай бұрын
Took a fair amount of time for me to realise it was groovy instead of kotlin Thanks
Philipp, my man, you're a true hero! You're helping me through my college course like nobody else.
Mahn you're doing so much for us, just keep it like that, love form India
@Bert-lv3jt
9 ай бұрын
from*
You're tutorials are amazing, I was just looking for a Room tutorial and saw that this dropped recently I feel so lucky lol
About a year passed but still actual topic. Watched this more than 4 times, still need to watch more))
This video is a god-send! Hope you have a long life and make many such videos that spread knowledge among the people who value it. Cheers!
@Theotoffel1
29 күн бұрын
direct speech: Philipp is amazing and his content too
Thanks man, the video fully describes all the steps to implement room. Also I liked that the code structure is well on point.
Thank you man you are making learning all this so much easier. You are a legend
Great tutorial Philipp! I would love to see how you would extend this to sync the data with an API containing a master database. For example if this is a shared contact list with all users of the master database.
@MrPieTech
6 ай бұрын
You will just have a query for all contacts, then request persmision to read all contacts then use the cursor that it returns to you
Fabulous! That could not be better. Thanks!
This is exactly what I needed. Thank you.
Thanks for such a wonderful and in depth explanation...you are a gem❣️
I have learned a lot! Thank you Philipp
Continue man, you are doing very well.
Thank you, quite a long tutorial but it's what i needed for my app!
woow you uploaded what i was searching for,, thank you so much
Great Explanation !
There's so much about this I still struggle to understand, between these tutorials and the official android ones. It seems like the way you do it and the way they do it is so different despite using the same systems. If anyone else is struggling to understand these concepts, know that you're not alone. A lot of the tutorials and guides for these subjects contradict each other, and it is difficult to tell what the differences between the implementations are.
@finnishcountryrussiansoulf9425
8 ай бұрын
The problem with android studio, is that some people use kotlin. others java, some use jetpack compose, some xml layouts, gradle has a few different implementations, different vesions, sdks, android studio layouts, standards and all of that is really messy. Just learn the tools you use separately, don't follow tutorials step by step. I know it sounds hard but that's the truth. If you still want to contunue this tutorial, use these settings: Empty activity(jetpack compose, the purple one), min sdk 24, groovy dsl. For gradle, target sdk 33. Use room 2.5.0, as the latest version needs target sdk to be 34. activity-compose should be 1.7.2, jvm target 17, compileOptions source an target java version 17. These setting worked for me, if you have build errors, read them through and correct the versions or just copy paste them into stack overflow.
@zainuldin9095
5 ай бұрын
In react-native or flutter you can achieve same features by writing 2 or 3 lines of code. i would say kotlin is totally useless. it is not worth checking out.
Love from India dude ❤❤ great job 🙏
Fantastic video. Thank you!!!
Thank you for this video !
You really know you stuff man❤❤❤
Awesome! Thank you.
Thank you bro, you do good job for all of us
The alt-enter trick is worth the video. But I agree with others, it's quite a bit over-kill just do demonstrate Room database stuff. But like always, your videos are excellent. Keep 'em coming.
can you explain the difference between statein(.... , whilesubscribed(5000) ) and collectAsStateWithLifecycle () are they supposed to do the same thing, because whilesubscirbed waits for 5 seconds ?
You are perfect! Thanks
There's always _state used, but when it comes to saving a contact you use state.value, is it correct? I'm building my first app with room database and I had some issues with saving (some parameters where always set to default despite what was set by user in form). When i changed the state.value to _state.value problem is gone :|
Great video, I would like to ask if there a way to output the raw sql query statement in logcat when I invoke Dao each time.
this is a great tutorial. Thanks for sharing Philipp. Now you only include inserting and deleting records, any chance of including an updating example? I tried to include a checkbox in the table, but have not been succesful in making it work.
Hello Phillipp, Great work! I got just one question. Could you explain why this time we are not have to make instance of database inside companion object in ContactDatabase class?
can you provide a Database relations with Room tutorial with compose and Kotlin flows
Great video! I learned a lot. I'm creating an app where users can login and sync their content from an API to view locally later. I'm anticipating that some users may switch between accounts, and I'm wondering how to handle the database so that the data is still cached when the user returns to a previous account. Do you have any tips or best practices for this scenario? I'd really appreciate any insights you can offer.
@ka61er
Жыл бұрын
Just check id user related to account you want to sign in in database
Won't this cause unnecessary recomposition of both AlertDialog and the ContactScreen each time you enter a new letter into the TextField's in the AlertDialog? Since you send a SetFirstName event each time.
Thank you bro... How can I manage state of data fetching from Room like Loading, Success, Error with this combined state approach?. This approach is similar to React-Redux, but can't understand how to apply in Android-Kotlin.
The Dependencies dont work for me,. I added the same id under Plugins and the exact same dependencies but jetpack compose cant sync. Instead I get the "unresolved reference" Error on the kapt dependency. Anyone know a fix?
Just a question is the playlist about relational database you have still work or it's outdated and if so please make new one
great content! as a question: how can i configure room inside an android library, how to handle the database loading when the database config is outside the mobile app module?
I love all the work you put in here, but how do you implement updating a contract this way?
Why is upsertContact/deleteContact suspend (in DAO) and other three functions not?
Bro why my viewModelScope is not importing its telling me that you have unresolved reference. when i m implementing onEvent function in ContactViewModel
I appreciate your knowledge sharing, wish you happiness in your life.
I did code along while watching and everything worked perfectly fine! I also figured out (with a bit of help form Perplexity AI and the docs lol) how to make a @Preview for the ContactScreen and populate this preview with a few contact numbers. It was a good exercise as well I have a question. If I were making a multi-screen UI or if I were to add more functionalities such as a sidebar menu, should all the classes, interfaces, and other relevant files be each contained in separate folders within the root of the app according to their functionality? Do you have any guide or reference on the best practices for how to organize source code project files?
@nrg4285
4 ай бұрын
Check his latest video at the time of my comment, he just made a new video about project folder structure
@zecuse
18 күн бұрын
The Contact Screen simply takes: 1. A Contact State, you can just instantiate one with whatever you want the preview to look like. 2. Since previews aren't interactable anyway, just send a matching function that does nothing! Wow! KZread going REAL hard on the comment suppression. This is attempt 4.
Wtf, the moment I need a new shenanigan, you drop a video on that topic, 😂
Wow man you are great at writing clean code.
@PhilippLackner
Жыл бұрын
Thanks!
i will try with you
Hi @Phlipp, can you please share a tutorial how to share android apks for different varients shared to different appcanter from single jenkins account?
I followed the tutorial but when I test the app on the emulator, it crashes and I cannot figure out why....
21:13 no matter what i do, i still get the error at the .delete thing... update: nothing that has viewModelScope works for me. it never recognizes it as something that exists i guess... idk why
This Tutorial is great.. Please make tutorial on Room with API using Retrofit
@hotellinaweb
10 ай бұрын
Why would you use room with Retrofit? Room is a local DB and IMO you do not need Retrofit to store or get stuff on/from Room DB.
Is it possible to make a Activity/Views/Fragments version of this instead of Jetpack Compose?
Many thanks for the beginners guide. Why (still) Room and not Realm? Since Realm is the elected lib for KMM
@Philip ... Is there a built in .db file viewer in android studio where we can browse tables
@PhilippLackner
Жыл бұрын
Showed that in the video 😅
right from the start "unresolved reference def: " why?
As always you're the absolute best! Thank you! If you have a database with one to many and many to many relations as in your other video "Android Room with Multible Tables", how do you map them to models you can use in the UI?
@shs4293
8 ай бұрын
Did you find out?
Thanks for this. I do have to say that I think you over engineered it a bit. This could've been 15 minutes. The tutorial focused too much on Flows, Compose and other things. I haven't worked with either before and I lost a few hours just trying to understand the basics of it when I really just wanted to work with Room. However, it was still a great tutorial, it just could've been shorter and more focused on Room itself.
Great Video
Goat of mob dev
Great tutorial!! i see all of your videos, is other level..., but i got an error with de Room database:"C:\Users\Lenovo\AndroidStudioProjects\JetpackRoomApp\app\build\tmp\kapt3\stubs\debug\com\matec\jetpackroomapp\data\Depot.java:7: error: Entities and POJOs must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type). public final class Depot {"
Hi Phillip thanks for the video, I heard that Room is not secure for Android devices. Is this true? thanks Pierre
Does someone have an idea why my Material 3 isn't working anymore with this tutorial?
when I run it I get a Duplicate class found error, any suggestions to fix this? also, you are a great instructor the way you explain things is very helpful thank you for making these videos.
@PhilippLackner
Жыл бұрын
Upgrade your Kotlin version to 1.8.10 :)
@NotamechanicBetty
Жыл бұрын
@@PhilippLackner IT WORKS!!! you might not understand how happy this makes me 😁😁😁thank you
I have one problem with text parameter of AlertFialog, I trying to put the parameter Buttons but it seems that is do not exists
@needankeistgenug
Жыл бұрын
Same here. Did you fix it?
@loogibot
4 ай бұрын
The 'buttons' parameter doesn't seem to be working with AlertDialog, so I used 'confirmButton' and 'dismissButton' instead. For 'dismissButton', you can use the 'HideDialog' method from 'ContactEvent'. I hope this helps!
Bro, it's MVI pattern you was used ?
which keyboard you use ??
So we have the interface ContactEvent, which contains nested classes (I think??), which themselves implement the ContactEvent interface. Shouldn't that lead to an infinite recursion, where every nested class contains (through the implemented interface) every nested class again?
@hotellinaweb
10 ай бұрын
I asked the same in a new comment.
@_zantetsuken_
9 ай бұрын
You don't instantiate ContactEvent like in the regular sense of using Interfaces. In this case, the sealed Interface is roughly said an enum of interfaces that represent a shared type (ContactEvent).
@mothhunter1889
9 ай бұрын
@@_zantetsuken_ thanks for the explanation!
Took me longer than I'd like to admit that I needed to use the init function for the view model to be able to read in settings that should persist across app launchings. 45:35 Notice that the sortType reverted back to FIRST_NAME. To get that selected sort to persist, it needs to be saved to a table in the database and then read in the init of the ContactViewModel. Edit: And be sure you only ever update these types of settings. For a couple of hours, I ran into a problem of the database blowing up in size because each time I changed one of these persistent settings, it was put into the database with a new id. To circumvent that, you need to query for that particular setting and update it. This might simply take the form of having a settings table that should only ever have a single record.
Is there any way to prepopulate the database?
Alert Dialog, Title and Text no longer in the parameters of the new one, also button not included
may I ask you a question philips? what do you think about greendao (database local) vs room?
@JacobFerrero
Жыл бұрын
GreenDao is discontinued, ObjectBox is its successor.
@aapipcps2311
Жыл бұрын
@@JacobFerrero thanks for your info, i'll try ObjectBox someday
ohh man i like how you organize the code even i got just 1% of the code hhh
Make a video on firebase as well
since this is a beginners course, when you goto create a New Class, could you do it slower on the screen please..
@xbox70333
11 ай бұрын
use '.' and ',' keys to skip each frame
In Mobile application to took the print a docu in printer
Followed this tutorial, I tryied to add it to my current project and the dependecies completely broke my project. Fortunetly, I was able to rollback with git. It would have broke my project
cool video)
Do you have paging tutorial?
This is for kotlin and not groovy?
When I click save it replaces my data instead of adding a new one
@mynameisearlb
10 ай бұрын
Did you use insert instead of upsert?
Great content always. Pls can you put one of your course on Udemy?
@PhilippLackner
Жыл бұрын
I got them all on my website: pl-coding.com/premium-courses
@balusekhar
Жыл бұрын
@@PhilippLackner in india it will be difficult to pay in pounds. So try to put them in udemy🙂
@Eyyuphan439
Жыл бұрын
@@balusekhar You are right.
@mohammedabdulrahman5045
Жыл бұрын
@@PhilippLackner Same here in Ghana: it's somewhat harder to purchase in Pounds.
@donjeph
Жыл бұрын
@@PhilippLackner please even if it is just one on Udemy it easy to get there
Great video. Of course, Android had to make handling database as complicated as possible. Ugh.
3:44 nice tool
"So this is a step by step guide on how to make a Room database. Now just make a sealed abstract suspended data class function that has these private vals, enums, mutable state contact event, e=mc2, 9/11 was an inside job" Right... I just wanted to write some data to my new database table. :)
@Kazner0h
8 ай бұрын
I had this same reaction 😅
stuck at @3:48 "no devices selected" App Inspection > Select Process
@jedrzej2338
9 ай бұрын
i have same problem, do you have any solution?
Ary you following MVVM in this project?
@KostahWasTaken
6 ай бұрын
There was used viewmodel but it's not MVVM it's MVI there is difference MVI uses intents which represent user actions/events. MVVM uses property binding to automatically propagate changes between View and ViewModel.
mate, anywhere can I contact you directly?
@PhilippLackner
Жыл бұрын
For business inquiries the email stated on my channel page. Not for coding questions though
What about sqldelight? It support multiplatform
@PhilippLackner
Жыл бұрын
I have a video about that already
@freshtechtips
Жыл бұрын
@Philipp Lackner I know but why we still use room here?
@jayantkumar1954
Жыл бұрын
Sql delight is used for KMM and KMP , not for native development
@freshtechtips
Жыл бұрын
@@jayantkumar1954 It's possible to use it in native android project + in kmm the app on android is still completely native while on ios maybe only the UI which is great
can i get that color scheme he is using in ide?
@likhitsakhare5810
17 күн бұрын
X-code dark
Saving for later 29:56
@2:33 gradle languange is like python
@astaghfirullahalzimastaghf3648
Жыл бұрын
@8:37 I really hate interface, but since kotlin has a feature like property delegation (that does not exist in C++) maybe it is good idea to have it. Also in java and kotlin, an interface can be converted to a real and concrete class at runtime called something like `ProxyClass` or something like that. Maybe this is the reason everybody love interface in Java and Kotlin. Remember this one in the Retrofit tutorial.
@astaghfirullahalzimastaghf3648
Жыл бұрын
@2:54 in C++ `::` means scope Resolution operator but in kotlin it means what? let's google first
Still don't understand how a single table tutorial would be useful, I am looking for multiple tables tutorials with one to many relationships but there aren't any.
@finnishcountryrussiansoulf9425
8 ай бұрын
This is just sql basics, no? You get the structure from this video, if you want to make multiple tables with relations, make a graph and connect the tables by fields. You'll have to make your own query methods tho.
we will wait Rerofit.
It's an amazing amount of code for just making a note. Is this how things are on Android or are you overcomplicating things? This is really hard to follow and is not very begginer oriented. The tutorial itself is good, but for people that have some experience already with Kotlin and Android.
@PhilippLackner
Жыл бұрын
The main code is for the UI. Similar amounts would be needed when making a website to do this. This is a beginner guide for Room, not for Android. Can't teach kotlin and Android basics in every video, I have Playlist for that
I can't get the AlertDialog working properly, title text and buttons parameter cannot be find... but my code is to the space bar identical to the one in the tutorial... I dont get it any help would be nice ?
@YasirZaman-jo4tf
5 ай бұрын
simple problem dude, I am stuck now here.
@loogibot
4 ай бұрын
The syntax/error highlighting is a bit sensitive, so if one or more parameter is incorrect, some of the others look wrong even if they are valid. To solve this, I did this: The 'buttons' parameter doesn't seem to be working with AlertDialog, so I used 'confirmButton' and 'dismissButton' instead. For 'dismissButton', you can use the 'HideDialog' method from 'ContactEvent'. I hope this helps!
@JavierLopezPR
3 ай бұрын
Same here. 😢 stuck at this part.
room is trash i cant get it to work any how error pops up here and there
@daveogfans413
10 ай бұрын
lol, maybe the problem is with you...
Is there anything more simple ?
I do not find this video is for basic learner to master concepts of room, you have used a lot of methods, difficult to follow, i think you are targeting experts to watch it not starting learner !!!
@dleonardo3238
6 ай бұрын
This was very easy and simple. Are you a beginner in android or beginning in programing completly?
@justmeagain9302
6 ай бұрын
You need to learn the fundamentals first or you might get lost a lot
@tenzinchoepheldev
5 ай бұрын
It is not for noobs . It is for beginner to intermediate
This I'm sorry to say isn't beginner friendly. There's so much happening other than Room itself (main reason for watching this video) it's distracting. I know it's hard work to put content out but I just had to point that out.
room shambles!
its not working like not working at all