Skip to content

Repository files navigation

TrainingDaggerPandec

Training tanggal 21 Mei 2020 Sabtu 16:00

  • TODO 1
//librarydef dagger_version ="2.25.2"
implementation "com.google.dagger:dagger:$dagger_version"
annotationProcessor "com.google.dagger:dagger-compiler:$dagger_version"
implementation "com.google.dagger:dagger-android:$dagger_version"
implementation "com.google.dagger:dagger-android-support:$dagger_version"
annotationProcessor "com.google.dagger:dagger-android-processor:$dagger_version"def retrofit_version ="2.5.0"
implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
implementation 'com.google.code.gson:gson:2.8.5'

  • TODO 2
publicclassMyAppextendsDaggerApplication {
@OverrideprotectedAndroidInjector<? extendsDaggerApplication> applicationInjector() {
returnnull;
}
}

  • TODO 3
<?xml version="1.0" encoding="utf-8"?>
<manifest>
...
<applicationandroid:name=".MyApp">
...
</application>
</manifest>

  • TODO 4
//todo 4@Singleton@Component(
modules = {
AndroidSupportInjectionModule.class,
}
)
publicinterfaceAppComponentextendsAndroidInjector<MyApp> {
@Component.BuilderinterfaceBuilder{
@BindsInstanceBuilderapplication(Applicationapplication);
AppComponentbuild();
}
}

  • TODO 5 Rebuild

  • TODO 6
publicclassMyAppextendsDaggerApplication {
@OverrideprotectedAndroidInjector<? extendsDaggerApplication> applicationInjector() {
// todo 6returnDaggerAppComponent.builder().application(this).build();
}
}

  • TODO 7
@ModulepublicabstractclassActivityBuildersModule {
@ContributesAndroidInjectorabstractMainActivitycontributesMainActivity();
}

  • TODO 8
@Singleton@Component(
modules = {
AndroidSupportInjectionModule.class,
//todo 8ActivityBuildersModule.class,
//end todo 8
}
)
publicinterfaceAppComponentextendsAndroidInjector<MyApp> {
...
}

  • TODO 9 DaggerAppCompatActivity
publicclassMainActivityextendsDaggerAppCompatActivity {
...
@OverrideprotectedvoidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

  • TODO 10
@ModuleclassAppModule {
}

  • TODO 11
@Singleton@Component(
modules = {
AndroidSupportInjectionModule.class,
ActivityBuildersModule.class,
//todo 11AppModule.class//end todo 11
}
)
publicinterfaceAppComponentextendsAndroidInjector<MyApp> {
...
}

  • TODO 12
@ModuleclassAppModule {
//todo 12@Singleton@ProvidesstaticStringprovidesString(){
return"ProvideString";
}//end todo 12
}

  • TODO 13
publicclassMainActivityextendsDaggerAppCompatActivity {
//todo 13@InjectStringstr;
@OverrideprotectedvoidonCreate(BundlesavedInstanceState) {
...
}
}

  • TODO 14
publicclassMainActivityextendsDaggerAppCompatActivity {
@InjectStringstr;
@OverrideprotectedvoidonCreate(BundlesavedInstanceState) {
//todo 14myLogD(TAG, "String Inject : "+ str);
}
}

  • TODO 15
@ModuleclassAppModule {
//todo 15@Singleton@ProvidesstaticContextprovideContext(Applicationapplication){
returnapplication.getApplicationContext();
}//end todo 15
}

  • TODO 16
publicclassMainActivityextendsDaggerAppCompatActivity {
//todo 16@InjectContextcontext;
...
}

  • TODO 17
publicclassMainActivityextendsDaggerAppCompatActivity {
@InjectContextcontext;
@OverrideprotectedvoidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
..
//todo 17Toast.makeText(context, "String Inject : "+ str, Toast.LENGTH_LONG).show();
}
}

  • TODO 18
publicclassResponsePost {
@SerializedName("id")
privateintid;
@SerializedName("title")
privateStringtitle;
@SerializedName("body")
privateStringbody;
@SerializedName("userId")
privateintuserId;
//getter setter
}

  • TODO 19
publicinterfaceApiService {
//https://jsonplaceholder.typicode.com/posts?userId=1@GET("posts")
Call<List<ResponsePost>> getPost(
@Query("userId") intid
);
}

  • TODO 20
@ModuleclassAppModule {
//todo 20@Provides@SingletonstaticRetrofitprovidesRetrofit(){
returnnewRetrofit.Builder()
.baseUrl("https://jsonplaceholder.typicode.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
}
@Singleton@ProvidesstaticApiServiceprovidesApiService(Retrofitretrofit){
returnretrofit.create(ApiService.class);
}//end todo 20
}

  • TODO 21
publicclassMainActivityextendsDaggerAppCompatActivity {
//todo 21@InjectApiServiceapiService;
@OverrideprotectedvoidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

  • TODO 22
publicclassMainActivityextendsDaggerAppCompatActivity {
@InjectApiServiceapiService;
@OverrideprotectedvoidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//todo 22apiService.getPost(1).enqueue(newCallback<List<ResponsePost>>() {
@OverridepublicvoidonResponse(Call<List<ResponsePost>> call, Response<List<ResponsePost>> response) {
myLogD(TAG, "ApiService Inject(Success) : "+ response.body().size());
}
@OverridepublicvoidonFailure(Call<List<ResponsePost>> call, Throwablet) {
myLogD(TAG, "ApiService Inject(error) : "+ t.getMessage());
}
});
}
}

  • TODO 23
//todo 23publicclassSessionManager {
privatestaticfinalStringTAG = "SessionManager";
privatestaticStringPREF_NAME = "session";
privatestaticStringKEY_ID = "id";
privateSharedPreferencesprefs;
privateSharedPreferences.Editoreditor;
@SuppressLint("CommitPrefEdits")
publicSessionManager(Contextcontext) {
prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
editor = prefs.edit();
}
voidsetId(intid){
editor.putInt(KEY_ID, id);
editor.apply();
}
intgetId(){
returnprefs.getInt(KEY_ID,0);
}
}

  • TODO 24
@ModuleclassAppModule {
//todo 24@Singleton@ProvidesstaticSessionManagerprovidesSessionManager(Contextcontext){
returnnewSessionManager(context);
}
//end todo 24
}

  • TODO 25
publicclassMainActivityextendsDaggerAppCompatActivity {
//todo 25@InjectSessionManagersessionManager;
@OverrideprotectedvoidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
}
}

  • TODO 26
publicclassMainActivityextendsDaggerAppCompatActivity {
@InjectSessionManagersessionManager;
@OverrideprotectedvoidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
//todo 26//sessionManager = new SessionManager(getApplicationContext());sessionManager.setId(1);
Toast.makeText(context, String.valueOf(sessionManager.getId()), Toast.LENGTH_SHORT).show();
myLogD(TAG, "Session Inject : "+ sessionManager.getId());
}
}

  • TODO 27 Repository
@SingletonpublicclassRepositoryExample {
privatestaticfinalStringTAG = "RepositoryExample";
privateSessionManagersessionManager;
privateContextcontext;
@InjectRepositoryExample(Contextcontext, SessionManagersessionManager){
this.context = context;
this.sessionManager = sessionManager;
}
publicvoidexampleFunction(){
Toast.makeText(context, "exampleFunction", Toast.LENGTH_SHORT).show();
myLogD(TAG, "exampleFunction : "+ sessionManager.getId());
}
}

  • TODO 28
publicclassMainActivityextendsDaggerAppCompatActivity {
@InjectRepositoryExamplerepositoryExample;
@OverrideprotectedvoidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
//todo 29//SessionManager mySession = new SessionManager(getApplicationContext());//repositoryExample = new RepositoryExample(getApplicationContext(), mySession);repositoryExample.exampleFunction();
}
}

@Named

//1@Qualifier@Documented@Retention(RUNTIME)
public @interface Named {
Stringvalue() default"";
}
//2@Singleton@ProvidesstaticStringprovidesString(){
return"ProvideString";
}
@Singleton@Provides@Named("str")
staticStringprovidesStringNamed(){
return"ProvideStringNamed";
}
//3@InjectStringstr;
@Inject@Named("str")
StringstrNamed;

Copyright 2020 M. Fadli Zein

About

Training tanggal 21 Mei 2020 Sabtu 16:00

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages