MVP, RETROFIT,DAGGER 2 ve RXJAVA Kullanarak Android Uygulama Geliştirme 4
Merhabalar, uzun bir ara verdiğim yazı serisine bu yazı ile noktayı koyacağız. Daha önce ki yazımız da nasıl “BaseUI” oluşturacağımızdan bahsetmiştim.
Bu yazımız da oluşturduğunuz “DataManager” ve “BaseUI” yapısını nasıl kendi viewlarınız da yani activity ve fragmentleriniz de kullanacağınızdan bahsedeceğim.
Hazırsanız başlayalım.
“./ui/SplashActivity” adında bir klasör oluşturalım. Ve bu klasörün içine “SplashActivity” adında bir activity açalım.
SplashActivity.java
public class SplashActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
}
Sonra Activity’de yapmak istediğimiz UI işlemlerini implement edeceğimiz bir interface( verilerin adaptere set edilmesi, modeldan gelecek veriyi UI’da kullanacağımız işlemler vb.) oluşturalım.
Ben SplashActivity.java’da modeldan gelecek veri ile ya kullanıcıyı kayıt ekranına yönlendireceğim yada mainActivity.java yı açacağım.
SplashActivityMvpView.java
public interface SplashActivityMvpView extends MvpView {
void openMainActivity();
void openRegisteractivity();
}
Bundan sonra presenter da yapacağımız işlemleri belirlediğimiz ve MvpView’dan extend edilecek bir interface oluşturmamız gerekiyor. Ben SplashPresenter’da sunucuya gidip kullanıcının kayıtlı olup olmadığını soracağım bunun için “startApplication()” metodunu kullanacağım.
SplashActivityMvpPresenter.java
public interface SplashActivityMvpPresenter<V extends SplashActivityMvpView> extends MvpPresenter<V> {
void startApplication();
}
En son modelden aldığı veriler ile UI ‘yı güncelleyecek olan Presenter’ımızı oluşturuyoruz.
SplashActivityPresenter.java
public class SplashActivityPresenter<V extends SplashActivityMvpView> extends BasePresenter<V> implements SplashActivityMvpPresenter<V> {
DataManager dataManager;
public SplashActivityPresenter(Activity activity,DataManager dataManager) {
super( activity);
this.dataManager=dataManager;
}
@Override
public void startApplication() {
}
}
Şimdi Presenter’ımız da sunucuya gidip bu kullanıcının kayıtlı olup olmadığını öğreneceğimiz ve “startApplication()” metodumuzu çağıralım. Bu metodu “data” klasöründe bulunan “service” klasörünün içinde ki “StartApplicationImp.java” dosyasından çağırmamız gerekiyor. Bunun için tüm data işlemlerimizi ( veritabanı, servis vb.) yapmak için kullandığımız “DataManager’i” çağıracağız. Tabi bir servisi çağırmadan önce progressdialogu çağırmamız lazım. Yoksa kullanıcı clientin ne yaptığını anlamaz.
@Override
public void startApplication() {
getMvpView().showLoading();// Progress dialog show
dataManager.startApplication(new ServiceCallback<CommonResponse>() {
@Override
public void onResponse(CommonResponse response) {
getMvpView().dissmisLoading(); // Progress dialog dismiss
if(response.getCode() == Constant.UNREGISTER_CODE){// Eğer sunucudan kayıtlı değil cevabı gelirse kayıt ekranını açıyoruz
getMvpView().openRegisteractivity();
}else if(response.getCode()== Constant.SUCCESS_CODE){// Eğer sunucudan kayıtlı cevabı gelirse kullanıcıya anasayfayı göstereceğiz.
getMvpView().openMainActivity();
}
getMvpView().killActivity();
}
@Override
public void onError(String message) {
getMvpView().showError(message);
getMvpView().killActivity();
getMvpView().dissmisLoading();
}
});
}
Şimdi metodumuzu doldurduk. Bundan sonra “SplashActivity” de bizim bu servisi çağırmamız gerekiyor. Bunun için SplashActivity’i BaseActivity’den extend edip SplashActivityMvpView’dan implement etmemiz gerekiyor.
SplashActivity.java
public class SplashActivity extends BaseActivity implements SplashActivityMvpView {
SplashActivityPresenter<SplashActivityMvpView> presenter; //Presenter sınıfımızdan bir değişken oluşturduk.
@Inject
DataManager dataManager; // Dagger 2 ile DataManager'ı çağırdık.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
((DaggerApplication) getApplication()).getDaggerComponent().inject(SplashActivity.this); // Dagger 2 den sınıfları inject etmek için bunu inject ettiğiniz classın içine yazmalısınız.
presenter=new SplashActivityPresenter(SplashActivity.this,getApplicationContext(),dataManager);// Presenter sınıfından bir nesne oluşturuyoruz. İsterniz bunu da inject edebilirsiniz.
presenter.startApplication(); // Ve presenterda bulunan "StartApplication" servisini çağırıyoruz.
}
@Override
public void openMainActivity() {
Utils.changeActivity(this, MainActivity.class); // MainActivity i açar
}
@Override
public void openRegisteractivity() {
Utils.changeActivity(this, RegisterActivity.class); // Register ekranını açar.
}
}
Tüm yapmamız gerekenler bunlar. 1 servis çağıracağız diye çok fazla işlem yaptık değil mi? Ama ileride yeni bir özellik eklemek istediğinizde emin olun çok rahat işleminizi gerçekleştireceksiniz ve sizin yerinize gelen bir android developer sizin neler yaptığınızı daha kolay anlayacak.
Yazı serimiz bitmiş bulunmakta arkadaşlar. Bu yapı daha çok geliştirilebilir. Eğer yukarıda yaptığım şeyleri anlamakta sorun yaşamışsanız projeyi Github’a push ettim istediğiniz gibi kodları kesip biçebilirsiniz.
Umarım ki faydalı bir yazı olmuştur.
Linkendln hesabım: https://www.linkedin.com/in/serkanozaydin/
Twitter hesabım: https://twitter.com/serkanzaydin