Training tanggal 21 Mei 2020 Sabtu 16:00
- TODO 1
//library
def 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
public class MyApp extends DaggerApplication {
@Override
protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
return null;
}
}- TODO 3
<?xml version="1.0" encoding="utf-8"?>
<manifest>
...
<application
android:name=".MyApp">
...
</application>
</manifest>- TODO 4
//todo 4
@Singleton
@Component(
modules = {
AndroidSupportInjectionModule.class,
}
)
public interface AppComponent extends AndroidInjector<MyApp> {
@Component.Builder
interface Builder{
@BindsInstance
Builder application(Application application);
AppComponent build();
}
}- TODO 5 Rebuild
- TODO 6
public class MyApp extends DaggerApplication {
@Override
protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
// todo 6
return DaggerAppComponent.builder().application(this).build();
}
}- TODO 7
@Module
public abstract class ActivityBuildersModule {
@ContributesAndroidInjector
abstract MainActivity contributesMainActivity();
}- TODO 8
@Singleton
@Component(
modules = {
AndroidSupportInjectionModule.class,
//todo 8
ActivityBuildersModule.class,
//end todo 8
}
)
public interface AppComponent extends AndroidInjector<MyApp> {
...
}- TODO 9 DaggerAppCompatActivity
public class MainActivity extends DaggerAppCompatActivity {
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}- TODO 10
@Module
class AppModule {
}- TODO 11
@Singleton
@Component(
modules = {
AndroidSupportInjectionModule.class,
ActivityBuildersModule.class,
//todo 11
AppModule.class
//end todo 11
}
)
public interface AppComponent extends AndroidInjector<MyApp> {
...
}- TODO 12
@Module
class AppModule {
//todo 12
@Singleton
@Provides
static String providesString(){
return "ProvideString";
}//end todo 12
}- TODO 13
public class MainActivity extends DaggerAppCompatActivity {
//todo 13
@Inject
String str;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
}
}- TODO 14
public class MainActivity extends DaggerAppCompatActivity {
@Inject
String str;
@Override
protected void onCreate(Bundle savedInstanceState) {
//todo 14
myLogD(TAG, "String Inject : "+ str);
}
}- TODO 15
@Module
class AppModule {
//todo 15
@Singleton
@Provides
static Context provideContext(Application application){
return application.getApplicationContext();
}//end todo 15
}- TODO 16
public class MainActivity extends DaggerAppCompatActivity {
//todo 16
@Inject
Context context;
...
}- TODO 17
public class MainActivity extends DaggerAppCompatActivity {
@Inject
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
..
//todo 17
Toast.makeText(context, "String Inject : "+ str, Toast.LENGTH_LONG).show();
}
}- TODO 18
public class ResponsePost {
@SerializedName("id")
private int id;
@SerializedName("title")
private String title;
@SerializedName("body")
private String body;
@SerializedName("userId")
private int userId;
//getter setter
}- TODO 19
public interface ApiService {
//https://jsonplaceholder.typicode.com/posts?userId=1
@GET("posts")
Call<List<ResponsePost>> getPost(
@Query("userId") int id
);
}- TODO 20
@Module
class AppModule {
//todo 20
@Provides
@Singleton
static Retrofit providesRetrofit(){
return new Retrofit.Builder()
.baseUrl("https://jsonplaceholder.typicode.com/")
.addConverterFactory(GsonConverterFactory.create())
.build();
}
@Singleton
@Provides
static ApiService providesApiService(Retrofit retrofit){
return retrofit.create(ApiService.class);
}//end todo 20
}- TODO 21
public class MainActivity extends DaggerAppCompatActivity {
//todo 21
@Inject
ApiService apiService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}- TODO 22
public class MainActivity extends DaggerAppCompatActivity {
@Inject
ApiService apiService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//todo 22
apiService.getPost(1).enqueue(new Callback<List<ResponsePost>>() {
@Override
public void onResponse(Call<List<ResponsePost>> call, Response<List<ResponsePost>> response) {
myLogD(TAG, "ApiService Inject(Success) : "+ response.body().size());
}
@Override
public void onFailure(Call<List<ResponsePost>> call, Throwable t) {
myLogD(TAG, "ApiService Inject(error) : "+ t.getMessage());
}
});
}
}- TODO 23
//todo 23
public class SessionManager {
private static final String TAG = "SessionManager";
private static String PREF_NAME = "session";
private static String KEY_ID = "id";
private SharedPreferences prefs;
private SharedPreferences.Editor editor;
@SuppressLint("CommitPrefEdits")
public SessionManager(Context context) {
prefs = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
editor = prefs.edit();
}
void setId(int id){
editor.putInt(KEY_ID, id);
editor.apply();
}
int getId(){
return prefs.getInt(KEY_ID,0);
}
}- TODO 24
@Module
class AppModule {
//todo 24
@Singleton
@Provides
static SessionManager providesSessionManager(Context context){
return new SessionManager(context);
}
//end todo 24
}- TODO 25
public class MainActivity extends DaggerAppCompatActivity {
//todo 25
@Inject
SessionManager sessionManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
}
}- TODO 26
public class MainActivity extends DaggerAppCompatActivity {
@Inject
SessionManager sessionManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
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
@Singleton
public class RepositoryExample {
private static final String TAG = "RepositoryExample";
private SessionManager sessionManager;
private Context context;
@Inject
RepositoryExample(Context context, SessionManager sessionManager){
this.context = context;
this.sessionManager = sessionManager;
}
public void exampleFunction(){
Toast.makeText(context, "exampleFunction", Toast.LENGTH_SHORT).show();
myLogD(TAG, "exampleFunction : "+ sessionManager.getId());
}
}- TODO 28
public class MainActivity extends DaggerAppCompatActivity {
@Inject
RepositoryExample repositoryExample;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
//todo 29
//SessionManager mySession = new SessionManager(getApplicationContext());
//repositoryExample = new RepositoryExample(getApplicationContext(), mySession);
repositoryExample.exampleFunction();
}
}//1
@Qualifier
@Documented
@Retention(RUNTIME)
public @interface Named {
String value() default "";
}
//2
@Singleton
@Provides
static String providesString(){
return "ProvideString";
}
@Singleton
@Provides
@Named("str")
static String providesStringNamed(){
return "ProvideStringNamed";
}
//3
@Inject
String str;
@Inject
@Named("str")
String strNamed;Copyright 2020 M. Fadli Zein