The FULL Beginner Guide for Room in Android | Local Database Tutorial for Android
Вставка
- Опубліковано 14 бер 2023
- 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...
Philipp, my man, you're a true hero! You're helping me through my college course like nobody else.
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.
This information really helped in adding the dependencies to my files
Thank you!
if you have versions confilicting just use the latest versions always, problem solved
Took a fair amount of time for me to realise it was groovy instead of kotlin
Thanks
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))
Thanks man, the video fully describes all the steps to implement room. Also I liked that the code structure is well on point.
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!
direct speech: Philipp is amazing and his content too
Thank you man you are making learning all this so much easier. You are a legend
Mahn you're doing so much for us, just keep it like that, love form India
from*
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.
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.
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
Thanks for such a wonderful and in depth explanation...you are a gem❣️
Thank you, quite a long tutorial but it's what i needed for my app!
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 :|
Fabulous! That could not be better. Thanks!
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 ?
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.
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?
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.
I have learned a lot! Thank you Philipp
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?
This is exactly what I needed. Thank you.
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.
Bro why my viewModelScope is not importing its telling me that you have unresolved reference. when i m implementing onEvent function in ContactViewModel
Why is upsertContact/deleteContact suspend (in DAO) and other three functions not?
woow you uploaded what i was searching for,, thank you so much
Continue man, you are doing very well.
Great Explanation !
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?
Just a question is the playlist about relational database you have still work or it's outdated and if so please make new one
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
I followed the tutorial but when I test the app on the emulator, it crashes and I cannot figure out why....
I love all the work you put in here, but how do you implement updating a contract this way?
Is it possible to make a Activity/Views/Fragments version of this instead of Jetpack Compose?
right from the start "unresolved reference def: " why?
Fantastic video. Thank you!!!
can you provide a Database relations with Room tutorial with compose and Kotlin flows
Love from India dude ❤❤ great job 🙏
Hi @Phlipp, can you please share a tutorial how to share android apks for different varients shared to different appcanter from single jenkins account?
Thank you bro, you do good job for all of us
Does someone have an idea why my Material 3 isn't working anymore with this tutorial?
which keyboard you use ??
Awesome!
Thank you.
Bro, it's MVI pattern you was used ?
Is there any way to prepopulate the database?
I appreciate your knowledge sharing, wish you happiness in your life.
Thank you for this video !
Many thanks for the beginners guide. Why (still) Room and not Realm? Since Realm is the elected lib for KMM
You really know you stuff man❤❤❤
Alert Dialog, Title and Text no longer in the parameters of the new one, also button not included
Hi Phillip thanks for the video, I heard that Room is not secure for Android devices. Is this true? thanks Pierre
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?
Check his latest video at the time of my comment, he just made a new video about project folder structure
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! UA-cam going REAL hard on the comment suppression. This is attempt 4.
You are perfect! Thanks
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.
Just check id user related to account you want to sign in in database
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.
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.
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.
@Philip ... Is there a built in .db file viewer in android studio where we can browse tables
Showed that in the video 😅
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 {"
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?
Did you find out?
Wtf, the moment I need a new shenanigan, you drop a video on that topic, 😂
i Love you Philipp
thanks for the tutorial
This is for kotlin and not groovy?
Do you have paging tutorial?
I have one problem with text parameter of AlertFialog, I trying to put the parameter Buttons but it seems that is do not exists
Same here.
Did you fix it?
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!
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?
I asked the same in a new comment.
@sackhaarspalter thanks for the explanation!
In Mobile application to took the print a docu in printer
Great Video
Wow man you are great at writing clean code.
Thanks!
may I ask you a question philips? what do you think about greendao (database local) vs room?
GreenDao is discontinued, ObjectBox is its successor.
@@JacobFerrero thanks for your info, i'll try ObjectBox someday
This Tutorial is great.. Please make tutorial on Room with API using Retrofit
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.
cool video)
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.
i will try with you
When I click save it replaces my data instead of adding a new one
Did you use insert instead of upsert?
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.
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.
Upgrade your Kotlin version to 1.8.10 :)
@@PhilippLackner IT WORKS!!! you might not understand how happy this makes me 😁😁😁thank you
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
can i get that color scheme he is using in ide?
X-code dark
Goat of mob dev
Make a video on firebase as well
ohh man i like how you organize the code even i got just 1% of the code hhh
stuck at @3:48 "no devices selected"
App Inspection > Select Process
i have same problem, do you have any solution?
since this is a beginners course, when you goto create a New Class, could you do it slower on the screen please..
use '.' and ',' keys to skip each frame
What about sqldelight? It support multiplatform
I have a video about that already
@Philipp Lackner I know but why we still use room here?
Sql delight is used for KMM and KMP , not for native development
@@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
3:44 nice tool
mate, anywhere can I contact you directly?
For business inquiries the email stated on my channel page. Not for coding questions though
Great video. Of course, Android had to make handling database as complicated as possible. Ugh.
Ary you following MVVM in this project?
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.
how can i save image in Room?Please Explain
Parse to base64 string
Great content always. Pls can you put one of your course on Udemy?
I got them all on my website: pl-coding.com/premium-courses
@@PhilippLackner in india it will be difficult to pay in pounds. So try to put them in udemy🙂
@@balusekhar You are right.
@@PhilippLackner Same here in Ghana: it's somewhat harder to purchase in Pounds.
@@PhilippLackner please even if it is just one on Udemy it easy to get there
"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. :)
I had this same reaction 😅
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.
its not working like not working at all
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.
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.
Saving for later
29:56
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 ?
simple problem dude, I am stuck now here.
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!
Same here. 😢 stuck at this part.
room is trash i cant get it to work any how error pops up here and there
lol, maybe the problem is with you...
we will wait Rerofit.
Is there anything more simple ?
@2:33 gradle languange is like python
@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.
@2:54
in C++ `::` means scope Resolution operator
but in kotlin it means what? let's google first
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.
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