Learn RxJava3, Clean Architecture,Room by creating full apps(6 Projects) | CLEMENT OCHIENG | Skillshare

Playback Speed

  • 0.5x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 2x

Learn RxJava3, Clean Architecture,Room by creating full apps(6 Projects)

teacher avatar CLEMENT OCHIENG

Watch this class and thousands more

Get unlimited access to every class
Taught by industry leaders & working professionals
Topics include illustration, design, photography, and more

Watch this class and thousands more

Get unlimited access to every class
Taught by industry leaders & working professionals
Topics include illustration, design, photography, and more

Lessons in This Class

7 Lessons (30m)
    • 1. Intro: Why this Course?

    • 2. Note: Our model class

    • 3. Essence of use cases

    • 4. ICallbacks: First use case

    • 5. IManager: Second use case

    • 6. NoteDAO: Data Access Object

    • 7. MyRoomDB: Our room database

  • --
  • Beginner level
  • Intermediate level
  • Advanced level
  • All levels
  • Beg/Int level
  • Int/Adv level

Community Generated

The level is determined by a majority opinion of students who have reviewed this class. The teacher's recommendation is shown until at least 5 student responses are collected.





About This Class

Mobile development patterns are evolving at a really fast pace. A lot of instructors still use old design patterns of development and methods of development. However if you plan to win work and job opportunities, you will be interviewed and tested on modern technologies. 

Some of these modern technologies are what we teach in this course. This is a full course and not just a simple class. The app we are creating here is a professional published app already being used by different users in their phones. It is a note taking app and is designed to teach you the following:

  1. RxJava2/RxJava3
  2. Clean Architecture - Recommended by Google.
  3. MVVM(Model View ViewModel) - Recommended by Google
  4. Room
  5. AndroidX
  6. Java Programming Language.

What the App does.

The app will allow you to:

  • Take notes and save them offline.
  • Notes are saved permanently on the device.
  • Notes can be edited and deleted.
  • The app is perfect for learning the aforementioned technologies because it is simple and goes directly to the point.

What You will be able to do after this course.

The technologies we are teaching in this course are the latest.  You will be able to:

  1. Create a full android app that you can publish in Google Play Store.
  2. Use the project we are offering as a template to implement an idea requiring offline storage.
  3. Use RxJava3/RxJava2.
  4. Design your app based on Google-recommended clean architecture.
  5. Design your app based on Google-recommended Model View ViewModel(MVVM).
  6. Create beautiful single page apps based on material guidelines.

NB/= However you need to watch the actual course to understand the how's and why's.

Meet Your Teacher

Hello, Clement here. I studied software engineering in college and is passionate about sharing to fellow developers and students my skills. I also own camposha.info website as well as ProgrammingWizards TV youtube channel. If you are coming here from my website, then I recommend you join Skillshare as you will not only have access to my courses but to thousands of other instructors as well.

See full profile

Class Ratings

Expectations Met?
  • Exceeded!
  • Yes
  • Somewhat
  • Not really
Reviews Archive

In October 2018, we updated our review system to improve the way we collect feedback. Below are the reviews written before that update.

Why Join Skillshare?

Take award-winning Skillshare Original Classes

Each class has short lessons, hands-on projects

Your membership supports Skillshare teachers

Learn From Anywhere

Take classes on the go with the Skillshare app. Stream or download to watch on the plane, the subway, or wherever you learn best.


1. Intro: Why this Course?: So who's up these meanings? Claimant on a software engineer. So I will be your instructor in this particular Arabs java three cause you're going to have several modelling technologies as you click this boot for application. And this application is a professional. A precaution is already published, the pistol, it's being used by lots of people all over the world. So an authority will learn how to create such tape runner precaution. But in the process you're going to learn several technologies. First of them being the RX Java, know as Z, switch through this particular tab, select these particular bits. We are actually asynchronously filtering data based on the items you're storing them, of course, integrity. Locally using Chrome and fishermen are fishing this particular guitar is synchronously. Okay, so you're going to learn about how to do reactive programming criteria. And also the reason why this is important, where you need to do your stuff asynchronously rather than just doing them. Of course, in the military. Now you're going to run that to the Arabs Java. You're going to learn about the room, how to perform the credit partitions. This, these people no longer write SQL statements is just an absolutely convenient, it's also quite productive and also quite complex. So they recommended grid to our local databases is using the home that is facing the escalate. Because of this. You're also going to learn several patterns for still good to learn how to declutter architecture to architectural introductory question. So they try to create an application that can be easily adjusted. As well as doing the extended, you run the benefits of electrical charge and how to structure your application is increasing architecture. It also inevitabilities the MVVM demography, whomever, a design patent that is recommended by Google. You learned some frontages. And Russell way, you need to use it in reputation and how to use it. The reason why we decided to build a single-page application is so that makes it easy for us to be able to Leonard is complex technologists to write lots of Buddha corner. Okay? So rather than focusing on the user interface, mostly good forecasts on the concepts. Again. Now, having said that, this of course, is a full Android application. So the, the end of this particular lesson, or this particular code, you're going to be good to create a full internet precaution that you'll be able to upload, of course, to the Play Store. Does is it leaves deserted thinks the target to run the Java programming language. And we're going to get the step-by-step tech because legacy, because 2. Note: Our model class: So the essence of this application is to take notes on a daily basis. And as such, our main, our main domain in this application is a neutral object. Okay? So we're Watson, not only for creating a student management system, then you may introduce Rhodesia object to be student. If an Kriging are implanting, please up. Human entity in that particular case would be the employee. So this main entities does our true color classes, okay? Yeah, our data object. They basically defined the item, the slogan to walk on. So innocuous you're walking or not sewer crediting Nazi or edited, not deleting nodes. Also going to be in this lesson is that struggling to define for grammatical yachtsmen band that we're going to defend the attributes for a single nudge. Did not of course, to have attributes like the traitor, the content, the bit for Christian as their, as the ID. So these items, these are actually does our coagulant could be stored in our room. Now the IDs will be generated and we're going to see Excel chart. So they're not desert domain classroom truck. We're going to press it under these particular integer. Remember, we're using the green architecture. So we wanted to separate our entities from our infrastructure. Ok. Now, in this particular lesson, as you said, we're using that, we're going to create this particular object, which is Africa object. But we're also going to connect it to room. We're going to decorate it with special attributes. So the true we'll be able to create for us, maybe trap this table. This is the actual gooseneck to specify. Let's go ahead and trunk talker. So our first task will be to define our inputs and predicts the tune blood coming for anxiolytics neutron rich entity. Then Andrew dx, the true primary key, then were so good to impose the serializable interface will explain why return. Now these are not Class2Go specifically tablinum in integer. So at entity table name equal to not step B, then public class not implements serializable. Then x primarity, auto-generate equal to true. Then at Colony for limbic Ctrl ID at Quora than private intended at Qur'an for name equal to tighter, private String tighter. Then at co-learning for content, favorites gene content. And then at Columbia named core to grid. Grid. Then private to Boolean is expanded equal to true. So you can see culture. If we're to change the name, you want to provide a custom republics table nim is supplied to the room compiler is going to create an escalate. Github is based. The room runtime is going to create for us an escalatory troubles with this particular name, the name that you stop railroad track. Okay. Then of course, these are going to be the attributes or the columns of our table. The faster will be the ID. Then we'll have the name culture as soon as you get. Now, the column types will depend on the data types that we have. So for example, in this case, because there's an ID and it's an integer. The inhibition of this table in a column, the column type will also be an integer because this is a string. Column type is also going to be true. Now we're telling room Tuesday ID as primarity and we're giving you the permission to to generated. So for it to be books to the trunk, the ID has to be an integer. So base this, is it going to be the attributes of or not. But you can also see how r cubed is going to be created. Now we've implemented this MCA interface core serializable. Doesn't know you're doing this one is there so that it makes her not object, have the capability to be Sera. Sera released. Now sometimes when you're creating an application that has multiple pages, you may want to pass on that object from one page to the other, or one up to the ADA. In Android, this surely knows this really, no simple way of doing it. Okay, you have to do to an agent. If you make an item or an object serializable, then you can TAS that particular customer objects for intent. No, the adoption is to make it placebo. Of course, that has been true for much more. Writing, much more code. Okay? Now, if you don't implement these two interfaces, serial, reservoir or placebo, then there's really no way in which we're going to pass these custom object. Now, what should they have to do that you'd have to pass the actual boots, id, name, that content, ETC. And then rebuild them, the target activity. You could only be able to pass the primitive types like integers and strings, and then be able to rebuild an object in the target approach. So by us implementing the serializable interface, we can pass an actual object. Okay? This is it, this deficit? Then of course, once you've done the zone, we're now just going to generate the cars are setter methods. So you can see ID tighter than content then did desirable accessor methods. So get rid. For example, return debts. Then of course set led to receive a date object and set it to the current register. Access or methods, should they add the methods that are going to expose our properties to other entities? Visit desire not to Java. Lets move on to our next class. 3. Essence of use cases: So we did talk about the essense of vision creating architecture to architect our application. Okay. Now it's for the sake of has having to create a high quality job percussion that can easily be extended. Testing. No, we didn't define our domain, of course, into two more, less the entity which you've already looked at, the use case. So innocuous, these cases are just going to define the operations to be performed on an integer. The entity is a very, very simple class. It's arbitrary object indifference, the items that you're going to be working on. Now how we are good to our condemn. Basically, we are going to defend right? Kinsey use kits. However, we're not going to write the actual logic in our use case. We are going to define interfaces, especially not call-backs, no, manager. We're going to define some simple functions that will also work on our note. Now, what should basically the rule is that we defined in our domain there any class, we clicked, any interface secret, each merchant opportunity in our infrastructure. We're going to make our dominant idea completely independent infrastructure. So if we have to write the operations to be performed grounds, we're going to write them abstractly. We're going to make them up to construct methods so that the implementations can be provided in the infrastructure. Okay? Now, if I were to perform an operation we dealt us requiring to import anything, then we are going to do electron insider manager. So let's go ahead and such. I call bucks. 4. ICallbacks: First use case: We've already talked about the essense of having a use case. We're going to have to use consists the manager, I call backs to the aqueducts. The I call bugs, as the name suggests, is going to contain our callback methods. These methods will be abstract. We don't try to provide the implementation structure because they asked, doing so would be forced to bring up dependencies from the infrastructure area. Okay. You said that one of the main purposes of the using the Clean Architecture is separation of concerns. We want to keep a domain that we're going to input stuff from the infrastructure layer, okay, for it to be testable, We have to keep it fairly simple. Now because our methods as an obstructive methods, for example, the operations that you're going to perform Mona, entity or non notch, which is we're going to frame them as abstract. So you don't have to put the implementer shots in this layer. We're going to provide their implementations in the infrastructure area, okay? Also going to define the Rx Java events, determiner events to support the on_success and they will defend them Pooja, as abstract methods inside these I call backs. Let's go ahead and quote unquote. So we set the input into our list, Java. Then we're going to import are not object yet, of course public class I call bucks. Now the cluster have similar interfaces. The fast interface would be thinner methods. The first club method is the insert, is going to receive two parameters as it has the mock object most of the movie favor. The second is an athlete method. I said listener. Object to the dust is also a delete. No, this is also going to receive the ice every slab as well as direct object. Now, our retrieve method will receive the refrigerator snap. So the next interface will be raised when we perform an operation. So for example, we're going to call it the icing listener. If we save our data, then they have their own success or the error. These are going to be the Alex Java preliminary results. The boat who we have, of course, our retailer snap or I fetch this now. This will be released to unsolved. It has been eroded and the sulfate tends to be close to us. So public interface, I fetch the slab, then soil because switched them. And this too not sooner. Game design, callback sutra. 5. IManager: Second use case: So the next tracker is the manager who now remember, we're talking about is a clean architecture is divided into a entities as well as entities have basically our data objects. The items to grammatical, defined and not objects linked for reading its characteristics. Now in the toolbox which variable conquered, we defined the peripherals that could be performed an interface. For example, the crud operations. Then also did defined some of the Java community events on success. And now in our manager who struggled to define now is basically simple operations that can be performed without us requiring two input infrastructure. Example. In this case for us to be routine such butane will have to import to the exam inputs and those inputs is defined them enough infrastructure. We have to, for example, dow classes. Are these inputs. These should belong to the infrastructure layer. We define these particular methods. However, for example, filtering unwritten Kristen, business, something that would require infrastructure level manager. So I manages this simple class which will contain static methods that we work on arbiter requiring to do those particular inputs. Okay, so let's go ahead and take the coordinates for the spectrum manager. We're going to set the list domain object, which is or not, then public class and then public static list. Then of course, the parameter, the trust needed to be a string. We're going to set a list which will contain. Our first step will be to validate this ArrayList. If it is not going to return the list, if it isn't, we're going to look through those particular nodes. So if unnoticed and that equals ignore that. Then get that. Okay. So you can see it's quite simple, but it makes sense for us to include a manager, okay? Because the only requirement or approximate for making this particular NOX infrastructure corner, okay? So this is it, this is easy to this particular node. Okay? So the next lesson. 6. NoteDAO: Data Access Object: Now one of the main conceptual technologist that two integers you're using rule, the send of using the row escalates sentiments to save arbitrage. Okay? So I'm trying to just, the fact that foster them is very intuitive and we're going to have a very simple process, okay? It's much, much more user friendly than clicking Aeschylus tetanus. But the biggest advantage of using room over rho square sickness is disrupted. We provided this comparative functionary. Capabilities will be labeled because I already did Allah queries, toughening and arbitrary. Compiling. This placebo, which is course tetanus, you have to type done from the application. Then of course, the question of crushes. No room is able to provide us with this function at compile-time capabilities, whereby we can try to get the buffer because you avoid rejection and R, So of course into a stiffness. Ok. So when the starting as a dependency, the day did we did the soil. Whom competitor? In consumer chalk. We have day room. And then design notation process at different compared to what is going to give us news compiling. Okay? So in this particular lesson, we're going to look at our Gao, no doubt tends to data access objects we're going to create a simple interface will be our data access object. This data access objects is going to define the methods are alpha squared. We're going to decode it denotes some special attributes. And these are the things next to me. And the US will be able to generate for us the appropriate squares technique. Okay? So let's type could become much, much quicker. So we're going to set the inputing the girl. Then we're going to put the input dataset. Then you're going to input the query. Then we're going to input the athlete didn't come and say list. Then you so good to put the Institute which is on McClintock. Because this was so gluten, null will come and see actually Tao and you'll have to visit professors had gotten toughness. Then of course we are set to that set. So this actually would concrete real memory orders still. So voting such name customer nut. Then update methods must be the return sludge can now trust. So I kept it in soil depth, which then postnatal extra deletion methods that return fluid or integer. So actually delete things. So did it didn't pass data object that this is how we write up query. We'll use the actual route. Then. The squares technique. Then, or say F12 deleted rooting for monoliths TB will know your views conceit that these methods are obstruct. Either. We need to write for xm for the Eskimos thickness and setting. Just they asked including this criteria attribute, room company is going to be able to know which one. Okay? So it's going to be able to APHA, tension given that we pass under subject and object are still has to be compatible with Chrome. So how do we make it compatible? Where you have to separate the table, then the spectrogram actually boots. If you did that, try and defend its inception rule, is going to be able to click on it. And the same thing with the aggregate queries to be the actual compiler framework. For example, if groups with their own communion compare the, compare the query statue, which kind of gives you the citations. So you can just click this piece had been kind of suggest for you. Of course, the rest of the query. In this case, because we're going to do this stuff, will go to the returning of ascertaining a flu bug. We're going to be able to detect preferable than those Uppsala should be looked right? Denotes depth hasn't been fetched from the database. Why doesn't it? Because we don't want to. Partitions is the main thing. Okay? So if you have to access them from the main thread. And that of course is going to go through to show you a uses. So it makes sense that you are asynchronous, ok? In this case, we're going to do to asynchronously using the Arabs Java. If you kind of associate that told what to do. For module are these operations, we're going to be doomed him. We're going to be performed in a synchronous way. Except that in this vector, what it kinda, something comfortable, ok, so this kind of group sub, so that you're kinda 7. MyRoomDB: Our room database: We've so far looked at dinner Shou Dao, which is our DAO class or an interface heartbeat taxes. Now given that you've already defined it, we no need to come up with good saturate the doubt because the honors track any dependency apart from OneNote. Okay. Customer. A custom color that dependency or Fama may only be, on the other hand, is going to depend on artworks Gao cyclical sensitive to saturate the GAO first, then come on. B is going to be an abstract class which is going to define for us the representation to become this syndrome is an obstruction and proper squared. Okay? So because it's presenting. Now we did this and we see that table based on this background class. So we won't need to write the SQL statements that are needed to generate agriculture stable. Now the symptom squares techniques that can lead to crypt and recover. Okay? He said, we're going to define an abstract class, was to click on recap this. So this class is to go to coordinate my presentation over. So putting the context, then we are going to be true. Then we're going to import our subject. Then actually tap into this class, social and equal to one. Then exploded schema, quirky farce. Now we say that this classroom struct, so clemency public class, my room dB then extends through. No private property will hold for us in some of these backdrops. Then public obstruction and Gao Liao. Then we're going to print a factory method which will help in the creation of this class as an absurd grassy contain such that this particular clusters cause you have to conclude that in. So the instance is going to be for us. So if nato VB equal canal Pira, the past the context, then degraded, then you provide the disturbance. Then for buck to destructive. Now, what's this rain is going to be effect of this particular ladies that if incremental fashion, then if a incremented and then from the project, then of course we worked. Okay? So just be aware, if you increment the fashion is going to regenerate the schema for that to force it to remove the tab. So if you don't want to be moved to implement on a question or you don't increment this particular Russian. Okay. Are you backup to transfer us to instance of Roman room? Let's proceed to our next stressor.