at ~ 9:20 we can never completely see the terminal ./gradlew command you exucuted because of your face blocking the view you should paste it in description and also explain better / in more details on how it works
At 09:40 his face cam covers the url. here is the full command --> ./gradlew :app:downloadApolloSchema --endpoint='paste-apollo-url-here' --schema=app/src/main/graphql/schema.graphqls
I learnt a new trick today: _state.update { it.copy()} is dope. Before I was doing _state.value = _state.value.copy() which is feels repetitive . You are a Legend!
Good explanation of not just GraphQL but on JetPack state and Hilt. I need to tighten up how I use JetPack state based on your video. Extremely good job.
It's a great video. There aren't many videos about this thank you. Why did we create country classes when we already have the opportunity to create custom queries in GraphQL?
Thank you so much for your work! It's really nice content. Few tips if you don't mind: - You could provide only ApolloClient in your Dagger Module and use @Binds for map CountryClient to ApolloCountryClient. So you can use just constructor @Inject for UseCases. - Why did you create CountryClient in domain package? It seems that it should be in data layer too. At your solution data layer knows about domain layer but is not good and it is break Clean Architecture approach. But anyway it was nice video, thanks!
Seems like you misunderstood something about CA then, domain is the innermost layer and is allowed to be accessed by all other layers (which is the reason CountryClient has to be in domain). So domain shouldn't know about data, but both presentation and data can access domain
Awesome! I use GraphQl and this tutorial helps with the Apollo client (currently manual creation of DTOs due to lower min SDK). Getting closer to touching every aspect of Android development! OpenID/OAuth 2 integration soon?
Thanks Phillip for the great work. Great tutorial with great explanation. Appreciate that you take time explaining things in details. Great job. Thank you.
Hello sir First, thanks for your great channel Secondly, can you make a video on how to build a small application from within which you only download the details of the application or features that you want? Thanks again
Many thanks for your work, Philipp! Would be great to have masterclass from you of working with content provider(for both cases of collecting and sharing data by app)
I wonder how well this scales. I feel like with this approach you need to be at least somewhat familiar with how the data is structured on the backend whereas with a rest api you can view it as a blackbox ("I dont care how or where you get it from, just give me this and that"). You can create rest api calls on a per view/screen basis (organized by sub-urls) which only gives you what you need in one package with one call, thus saving phone resources and bandwidth. I feel like with graphql you either have data related logic on client side which maybe shouldn't be there or you use it exactly like a well implemented rest api. What am I missing here?
There are many systems that have API's that grow over time from the Rest implementation. Most backends are not well designed with the client in mind, not delivering the minimal payload. Its just not been a priority for the BE community. GraphQL is a trade-off solution for these older systems where they can put a layer between the BE and the FE that allows the FE to reduce the payloads on the network, but the tradeoff is that the BE needs to be implemented that can perform those BE calls in a GraphQL way. If you are greenfielding a project and you know you will creating it for mobile, GraphQL is likely overload, as you can restrict your API's for mobile, or have separate calls for mobile.
Did you measure it? If yes, does it effect user experience? No? Then it doesn't matter 😄 There's a common saying that Premature optimization is the root of all evil
Hey Philipp, Please can you tell me how to pdf file upload in graphql? mutation UploadUserHandBookFileQuery($productGroupId: String, $filePathKey: String, $file: Upload!, $enrollmentId: String) { uploadUserFile( productGroupId: $productGroupId filePathKey: $filePathKey file: $file enrollmentId: $enrollmentId ) { __typename url fileName expiresAt } } I am sharing query, Please help me. Thank you in advance.
Wait remind me why do we need to provide usecases through modules? It's our own classes and not like ViewModel or Activities or like third-party classes such as Room DB object. Can't we just @Inject them?
@@PhilippLackner eh im pretty sure u can constructor inject them, we do it all the time in our code base. Well we use Dagger2 but im pretty sure Hilt does the same since its basically an extension of it. The only time we cant constructor inject them directly is when we need to inject viewmodel/presenter to activity/fragment, or when we inject stuffs like third party object like Room
hi philip.. im trying to Buy some of your course but idk how to calculate the fees , because in my visa card i have 250 euros but when i want to buy your 99 course the page tells me that i don't have money enough !! WTF Im from argentina! Can u help me pls? because im trying to buy you course every time but idk why i cant!!
I am not able to download using gradlew command as it is showing me error 'could not resolve classpath' for android gradle plugin and google play services. I tried multipe thing but not working maybe due to version catalogs. I am using gradle version 8.3.1. If anyone got this and solved..please help..thank you
- In plugin 'com.apollographql.apollo3' type 'com.apollographql.apollo3.gradle.internal.ApolloDownloadSchemaTask' property 'schema' doesn't have a configured value. i am getting this error could you please help me
at ~ 9:20 we can never completely see the terminal ./gradlew command you exucuted because of your face blocking the view
you should paste it in description and also explain better / in more details on how it works
You're not from this world! You're so helpful with your videos! ❤️
Thank you🙌❤️
danke mein mann
@@PhilippLackner
What is the full command here? 9:40
I await for this. Thank you for all what you do for the Android community.
At 09:40 his face cam covers the url. here is the full command --> ./gradlew :app:downloadApolloSchema --endpoint='paste-apollo-url-here' --schema=app/src/main/graphql/schema.graphqls
android community are the best ,, than broooooo
The only useful comment
Thank you
You are amazing man , you have a great effect in my work experience as an Android developer , keep going !
Bro since i started android i see you more than my family :)
Going for the 100k! congrats dude you deserve the best :)
🙌🙌❤️
@@PhilippLackner btw do you mind to send me the full path that you write on terminal in 9:19? your webcam got in front of it hehe
I like how your t shirt changed magically at 1:33
39:50 you clicked my country there! Love and respect from countries[39:50] Philip!
Congratulation 100.000 Follower, cool
I learnt a new trick today: _state.update { it.copy()} is dope. Before I was doing _state.value = _state.value.copy() which is feels repetitive . You are a Legend!
Good explanation of not just GraphQL but on JetPack state and Hilt. I need to tighten up how I use JetPack state based on your video. Extremely good job.
Thanks 🙌🙌
Another MasterClass from Philipp! Many Thanks!!!
I was waiting for this for so long... Finally...
It's a great video. There aren't many videos about this thank you. Why did we create country classes when we already have the opportunity to create custom queries in GraphQL?
Thank you for always showing amazing content 🇧🇷🇧🇷🇧🇷
Thank you so much for interesting topics. Please don't stop to do some non-standart stuff sometimes
Thanks for putting out content on complex topics
You ve just blown my mind with this.. thanks boss
Always learning from you Philipp.
Thanks for making such a video, It helps a lot, keep it up 👏
Great video! I can sense that your new premium course might be about creating a ktor backend with grapql then KMM or just android 😁
Actually not, I think GraphQL is a bit too niche for that 😁
Fantastic and crystal clear explanation. Thank you very much 🙏.
Hi, Great Philipp, but could you please explain how to do it without use cases, can i directly access countryClient in viewModel?
Thanks, Philipp, for amazing content 🇧🇷
Thank you so much Philipp! This helps me a lot! :)
LOL ... just finished my multi-module clean arch Android GraphQL project ... Needed this a week ago 🙂
If you turn on Apollo cache you get a Flow and it looks more like the RoomDB
Amazing tutorial ♥
Nice explanation, tnx!
Thank you so much for your work! It's really nice content.
Few tips if you don't mind:
- You could provide only ApolloClient in your Dagger Module and use @Binds for map CountryClient to ApolloCountryClient. So you can use just constructor @Inject for UseCases.
- Why did you create CountryClient in domain package? It seems that it should be in data layer too. At your solution data layer knows about domain layer but is not good and it is break Clean Architecture approach.
But anyway it was nice video, thanks!
Seems like you misunderstood something about CA then, domain is the innermost layer and is allowed to be accessed by all other layers (which is the reason CountryClient has to be in domain).
So domain shouldn't know about data, but both presentation and data can access domain
@@PhilippLackner ok, maybe I missed it. Thanks.
Love it ❤️
From Algeria
Sound great, but does the API or server-side need to handle anything to make this work?
Awesome! I use GraphQl and this tutorial helps with the Apollo client (currently manual creation of DTOs due to lower min SDK).
Getting closer to touching every aspect of Android development! OpenID/OAuth 2 integration soon?
Thank you Philipp 👏
22:21 this made my day about use cases :V
Thanks Phillip for the great work. Great tutorial with great explanation. Appreciate that you take time explaining things in details. Great job. Thank you.
Thank Philipp, create another one about gRPC, please
Wow amazing 😍❤️
Hello sir
First, thanks for your great channel
Secondly, can you make a video on how to build a small application from within which you only download the details of the application or features that you want?
Thanks again
Amazing bro!
These auto generated model classes aren't parcelable, so how can we transfer data between different screens ?
Is there any way to generate the DTOs automatically without having ro create them manually?
Nice one phillip...
Very interesting topics ❤
What's the difference between a repository and a client?
Many thanks for your work, Philipp! Would be great to have masterclass from you of working with content provider(for both cases of collecting and sharing data by app)
you absolutely rule
Cool! I started from initial project and finish it! All works! Great! 🙂
I wonder how well this scales. I feel like with this approach you need to be at least somewhat familiar with how the data is structured on the backend whereas with a rest api you can view it as a blackbox ("I dont care how or where you get it from, just give me this and that"). You can create rest api calls on a per view/screen basis (organized by sub-urls) which only gives you what you need in one package with one call, thus saving phone resources and bandwidth. I feel like with graphql you either have data related logic on client side which maybe shouldn't be there or you use it exactly like a well implemented rest api. What am I missing here?
There are many systems that have API's that grow over time from the Rest implementation. Most backends are not well designed with the client in mind, not delivering the minimal payload. Its just not been a priority for the BE community. GraphQL is a trade-off solution for these older systems where they can put a layer between the BE and the FE that allows the FE to reduce the payloads on the network, but the tradeoff is that the BE needs to be implemented that can perform those BE calls in a GraphQL way.
If you are greenfielding a project and you know you will creating it for mobile, GraphQL is likely overload, as you can restrict your API's for mobile, or have separate calls for mobile.
Mapping a list every time you fetch a data is kind of resource intensive specially when you have a large data set
Did you measure it? If yes, does it effect user experience? No? Then it doesn't matter 😄
There's a common saying that Premature optimization is the root of all evil
@@PhilippLackner hmm yes loading times is much longer. Ill keep that in mind
@@PhilippLackner if you implement paging I think you wont notice the difference
What is the full command here? 9:40
Still waiting the full command
@@aldiguizot i actually never seen him fixing his mistakes in comments :(
Kick when they say please
Nice!
Hey Philipp, Please can you tell me how to pdf file upload in graphql?
mutation UploadUserHandBookFileQuery($productGroupId: String, $filePathKey: String, $file: Upload!, $enrollmentId: String) {
uploadUserFile(
productGroupId: $productGroupId
filePathKey: $filePathKey
file: $file
enrollmentId: $enrollmentId
) {
__typename
url
fileName
expiresAt
}
}
I am sharing query, Please help me. Thank you in advance.
I love your videos. Could you dive a bit deeper into the topic and show how to handle error handling, pagination, interceptors?
Wait remind me why do we need to provide usecases through modules? It's our own classes and not like ViewModel or Activities or like third-party classes such as Room DB object. Can't we just @Inject them?
No, how should dagger know how to create our own classes 🤔
@@PhilippLackner eh im pretty sure u can constructor inject them, we do it all the time in our code base. Well we use Dagger2 but im pretty sure Hilt does the same since its basically an extension of it. The only time we cant constructor inject them directly is when we need to inject viewmodel/presenter to activity/fragment, or when we inject stuffs like third party object like Room
how to do Mutation ?
hi philip.. im trying to Buy some of your course but idk how to calculate the fees , because in my visa card i have 250 euros but when i want to buy your 99 course the page tells me that i don't have money enough !! WTF Im from argentina! Can u help me pls? because im trying to buy you course every time but idk why i cant!!
I am not able to download using gradlew command as it is showing me error 'could not resolve classpath' for android gradle plugin and google play services. I tried multipe thing but not working maybe due to version catalogs. I am using gradle version 8.3.1. If anyone got this and solved..please help..thank you
Worked for me after changing JDK version to 11 or jbr 17 in Settings ->Build, Execution, Deployment -> Build Tools -> Gradle
How to get response code?
Cool.
Anyone here know how to use Android Printing Framework With Jetpack compose?
🇩🇿 thanks Philip
Make api call with retrofit for Soap/xml please in kotlin
Those are dead protocols at this point. I have never seen a tutorial showing how to use retrofit with XML on android!
@philipp lackner?
9:25 I cannot see the entire command :C
Nice content, thanks you very much!
Can you make video about oauth 2.0, how and where store tokens and how to autologin correctly? :)
- In plugin 'com.apollographql.apollo3' type 'com.apollographql.apollo3.gradle.internal.ApolloDownloadSchemaTask' property 'schema' doesn't have a configured value. i am getting this error could you please help me
Excellent, thank you very much for teaching this