todo-mvp | Todo Lite app following MVP Architecture in Java | Architecture library
kandi X-RAY | todo-mvp Summary
kandi X-RAY | todo-mvp Summary
Todo Lite app following MVP Architecture in Java
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
- Gets the data snapshot for the specified query .
- Gets the tasks .
- Schedules a task reminder .
- Creates a notification for a task .
- Logs to the user .
- Initialize the task model .
- Called when a child view is pressed .
- Load priority string .
- Initializes the recyclerView .
- Enables or disables or disable register button .
todo-mvp Key Features
todo-mvp Examples and Code Snippets
Community Discussions
Trending Discussions on todo-mvp
QUESTION
I'm using Recyclerview
inside a Fragment
Following Google's sample of MVP Android architecture and I tried to make the View
part passive as possible following this article , which makes the whole Recyclerview
Adapter
passive of the Data Models and the presenter handles it.
Here is my code of the Fragment:
...ANSWER
Answered 2017-Oct-09 at 19:15I noticed in your item xml your constraintLayout height is match_parent right? I recommend you to use it as wrap_content
QUESTION
I've been following MVP design pattern provided by Google to refactor my application. I have one MainActivity and many Fragments and it seems little be messy for me to create an activity for every fragment, so I've been thinking to register presenter in fragment. What I'm seeing is that every fragment register its own presenter, but I'm not sure how much wrong it is... :)
So here is my Presenter:
...ANSWER
Answered 2017-Mar-15 at 21:32As you can see in Google's samples (https://github.com/googlesamples/android-architecture), Activities
create Presenters
. Also Views
attach to Activity
and Presenters
get views (Fragments
) as parameter.
After Fragment
transaction committed or Fragment
(view) state restored Presenters
get created and take Fragments
(views) as parameter than call
QUESTION
Repository Pattern is defined by Hieatt and Rob Mee as design pattern that mediates between the domain and data mapping layers using a collection-like interface for accessing domain objects.
Basically it abstracts one or more I/O devices (cloud, disk, data base, etc) into a common collection-like interface where you can read, write, seek and delete data.
On Fernando Cejas's Android Clean Architecture, all data needed for the application comes from this layer through a repository implementation (the interface is in the domain layer) that uses a Repository Pattern with a strategy that, through a factory, picks different data sources depending on certain conditions.
However, as pointed out by professor Douglas Schmidt at Coursera course, content provider manages and mediates access to a central repository of data to one or more applications
In the book Programming Android, content providers are used as a Facade for a RESTful Web Service. This approach was initially presented by Virgil Dobjanschi during Google I/O 2010.
Thus, instead of using content providers to access the local SQLite database, why not using it as the repository pattern itself?
...ANSWER
Answered 2017-Apr-06 at 15:18That is an interesting question. I think my first answer will be no, Content Provider is not an implementation of the Repository Pattern.
As you mentioned, the Repository Pattern is meant to separate the business logic (domain) from the data layer. This approach allows you to create unit tests for your business logic (so domain should not depend on Android at all). By using a Content Provider you will need to have some sort of Android objects in your domain.
You could imagine a way to hide the Content Provider logic behind an Interface, but you will loose many of the nice stuff a Content Provider allows you to do.
If you are interested in Android Architecture I would recommend you to have a look at this Github project Android Clean Architecture. You will find a nice way to separate your presentation, domain and data layer, and the communication between the domain and data is done by using a Repository Pattern.
Hope this will help!
QUESTION
I'm implementing an MVP app in which the Views are fragments loaded in Activities. Each Activity had 1 fragment to display. I have to change my implementation and add the TabLayout which will now display the fragments. I've tried different ways of passing the fragment to the adapter but all makes my app crash and I can't understand the error. My last try, I'm passing an arraylist of fragments(1 for now) to the adapter. At the base, I'm following google samples MVP todo app, but I need to implement this tab layout. Please, this is for my major project, I looked everywhere and this is my last resort.
...ANSWER
Answered 2018-May-03 at 00:56For what you want to achieve, you won't be using the FragmentLoader Class. Remove it (just for the tabs Activities). And the getSupportFragmentManager line.
In Home Activity, how you set up the tabLayout and Viewpager, it's fine. Remove addFragment line. Add the following after setAdapter:
mTabLayout.setupWithViewPager(mViewPager);
In the tabPagerAdapter, just create the object presenter and fragment there. In the getItem method, case 0, you can have:
HomeFragment homeFragment = HomeFragment.newInstance(); homePresenter = new HomePresenter(repo, homeFragment); return homeFragment;
Oh and in the TabPagerAdapter, you can pass your repo argument there for creating your presenter.
I hope I was clear. Let me know if you have any issues.
QUESTION
I've seen good examples of MVP architecture (here and here). Both present only simple interactors, but I wonder how to deal with more complex use case, consisting of steps, which are repeated in other use cases.
For example, my API requires token to authenticate any call. I've created an interactor to get that token (GetToken
). I want to get user's last login date (GetLastLoginDate
) and then fetch a list of changes that occured between that date and now (GetVersionChanges
).
Where those interactor should be chained? I want to keep them separate, because some of them are reused in other parts of the code. I've came up with two solutions.
Presenter should chain all interactors. This solution works as long the use case is not complex and doesn't have many preconditions. It seems to me it's not the right place, because it burdens presenter with another responsibility.
Interactor can use many repositories (no clean architecture rules are broken then). Why not use
TokenRepository
in other interactors? Because getting token is much more complex than just reaching to repository. Repeating the steps in other interactor does not reuse already existing code.
Both solutions have their flaws and are against basic principles (DRY, single responsibility principle).
...ANSWER
Answered 2019-Apr-12 at 16:21If I were you I would just put the logic of getting a token in a separate interactor (maybe named getTokenInteractor) and call that interactor from your others interactor who may need it. That way, it would be in an interactor that you chose either to use a token (and call or not your getTokenInteractor) and also in an interactor that you retrieve it and deal with errors. I would do the same for your "getVersionChanges" use case and let an interactor chain the calls.
Let's imagine you have a presenter who needs to display the version changes. He will call a first interactor (GetVersionChangesInteractor) who will first check if he has a token (by calling getTokenInteractor), then call GetLastLoginDateRepository for retrieving the date, and call GetVersionChangesRepository with that date and finally give the result to your presenter.
That way, your business logic can stay 100% in your interactor and your presenter can focus on how he will display that on screen.
By the way, if your API needs a token for every call you should move it in an Interceptor so you do not have to deal with it at every call.
QUESTION
this my Code
...ANSWER
Answered 2018-Sep-15 at 19:44Remove final from your class
QUESTION
I am trying to build an app that is based on [todo-mvp-dagger] and retrofit. After creating the initial classes, modules, room db (first time using) and rebuilding the project, I am receiving an error: cannot find symbol variable DaggerAppComponent
Following todo-mvp-dagger app from Google Android Architecture sample.
The [todo-mvp-dagger] app is building fine but mine is not.
What am I missing?
Here is my project repository.
Code is minimized now
UPDATE
I updated the Dagger version and now I am getting following errors
error: cannot find symbol variable DaggerAppComponent
/Users/abhinavtyagi/Documents/workspace/workspace_android/Research/UdacityCourseViewer/app/build/generated/source/apt/debug/com/tyagiabhinav/udacitycourseviewer/di/DaggerApplicationComponent.java: uses unchecked or unsafe operations. Recompile with -Xlint:unchecked for details.
/Users/abhinavtyagi/Documents/workspace/workspace_android/Research/UdacityCourseViewer/app/build/generated/source/apt/debug/com/tyagiabhinav/udacitycourseviewer/di/DaggerApplicationComponent.java: uses unchecked or unsafe operations. Recompile with -Xlint:unchecked for details.
...ANSWER
Answered 2018-Jul-07 at 06:54replace DaggerAppComponent
with DaggerApplicationComponent
since your component name is ApplicationComponent
not AppComponent
QUESTION
I am trying to implement an MVP
architecture by following Google's sample todo app
The problem I have is that I am getting a NPE
when starting my presenter
in the onResume()
of the fragments
. This happens when I change the orientation of the device.
I have a FragmentPagerAdapter
with two static fragments
.
From what I understand the FragmentPagerAdapter
is meant to retain the fragments
when the screen is rotated which implies the fragments
would retain their presenters
. However the presenters
are null in onResume()
so there is something I am not understanding.
Any help/comments are appreciated.
Edit:
Here is my current FragmentPagerAdapter
...ANSWER
Answered 2018-May-12 at 21:17To be honest, fragments in Android are such a hassle, I get frustrated by them to this day after quite a few years of Android development. I use something like this, will be useful in this case:
QUESTION
I'm writing an Android application and although I already have read about MVP and saw some examples in Android, I'm in doubt about how should I structure this part of the app.
NOTE: My app follows a structure very similar to: https://github.com/googlesamples/android-architecture/tree/todo-mvp
In this app, the Model should fetch JSON data from a web service. This data, among other stuff, contains links of images that the app should download asynchronously. And, after downloading, these images should be presented to the user.
How should I approach this?
Right now, my idea is to add the web service request logic on the Model (I'm also using the Repository pattern) and the download logic on the Presenter. Something like this (the code is just an example):
...ANSWER
Answered 2018-Apr-11 at 02:37You can have a Presenter without the need of having a view explicitly linked to that Presenter. In other words, you can have a presenter only to encapsulate some logical. In your case, you can have a presenter that only knows how to fetch and provide some images. And your view can make use of this specific presenter.
I did not get why would you have to pass the context to the model.
Right now, my idea is to add the web service request logic on the Model (I'm also using the Repository pattern) and the download logic on the Presenter. Something like this (the code is just an example):
You could do that. However, it seems more like MVVM where you put logical into Model and the Model knows how to fetch data.
In your case, you want to follow MVP, so the model only holds data (pieces of information/data). So, you can have one Presenter that knows how to download your images. And you can have some Utils
that could help you with the request part. You can have another model for that Presenter
that download images for saving your images, like a cache. And, again if you want to make some sort of cache logic, you should do on the same presenter that knows how to download an image. Or, if it becoming too big and complex, you can make a Presenter
that only knows hot to cache stuff.
Once your Presenter
only knows how to download an image, or only knows how to save an image. You can test it easy, just pass a link to your Presenter
method and check if it could handle download the image.
Note: I did not understand how could be convenient or important you pass context for your model unless it knows some sort of cache using Android preferences?
NOTE 2: I would love if I could unit test this part of the app (Mocking the DownloadManager). So, passing the Context to the Model is not an option, as it breaks the MVP (IMHO) and would be much harder to unit test it.
QUESTION
I'm new to Generics and the Singleton pattern in Java. I have the following questions:
Is a Generic class compatible with the Singleton Pattern, namely having a static instance?
If so, I have the following Generic class that I want to convert to a Singleton. What is the best practice?
(Beginner question) Is there a good way to de-generify an instance of the class in runtime? passing the class as parameter in getInstance()?
ANSWER
Answered 2017-Dec-29 at 12:23- Since the singleton pattern tries to guarantee only one living instance of a given class at any time, it's not very compatible with the idea of a versatile class that can accept or produce different results depending on its current generic type. For generics to be any useful, you need to be able to create different flavors of the same type (usual exemple: a List of String and a List of Integer)
- N/A
- If you are passing a parameter to the getInstance of a singleton, then you are not really wanting a singleton but a factory. A singleton can only be non parameterized, or else the first call freezes the context.
Do not abuse of singleton. They are the first pattern you may try to implement, because it's the first in every book, but it's almost always at least useless, at most a performance bottleneck and a bad design decision (not very OO)
EDIT:
you assumption that each new instance couldn't share the same cache is basically wrong, for two reasons:
- not using a Singleton does not forces you to use several instances of the same type. It just allows you to do so, as well as enabling inheritance (which the singleton simply cann't). If you use Spring and a singleton-scoped bean (the default), then your repository exists only once in memory - even if it does not implement the singleton pattern as described in the books - and is shared between all consummers (thus only one cache). This can be accomplished without spring too, just use some kind of factory or registry.
- caching with an hashmap in your class is a bit fishy, too. Caching is an implementation detail and you should not try to implement it in this way (you will end up eating the whole memory quite easily, at least, use WeakHashMap instead - or the Guava version, using CacheBuilder). You could also declare your cache as static so it will only exist once in memory. Modern applications treat caching as an aspect, like transactions for example. It should not leak to your code. For example, look at ehcache, redis, terracotta, etc. they all implement the JSR-107 and are configured directly on your method prototype, with some annotation (@Cacheable, etc.). Ho and caching usually goes to the service layer - you do not cache the state of the db, you cache the responses sent to the users after processing of the business logic (even if this rule is not absolutely strict)
The singleton also has a very big problem: it is directly responsible to instantiate the object, that is, direct use of the new
keyword. This is a pain, as you can not change the concret type of the implementation at runtime (for testing purpose, or any other use). Look at the factory/factory method pattern to see a better way to change the type at runtime.
What you can do is having an abstract base class, generified, that your concret dao will extend (but those will not be generic). Something like this:
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install todo-mvp
This app runs off a Firebase backend. You will need to generate your firebase backend. To do this, navigate to https://firebase.google.com/ and sign up. Create a project called "Todo Lite" (or what ever you want to call it).
Generate your own google-services.json file to use with the app. Navigate to the Firebase project settings dashboard. You should see an option to download the google-services.json file. This must then be placed into the app folder of this project.
Create an account on Fabric for Crashlytics. To do this, navigate to https://fabric.io/sign_up and Signup and get fabric_api_key
Rename the gradle.sample.properties to gradle.poperties and put the values accordingly and you are good to go.
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page