0

I've read more about Dagger2 and I find that is similar to Butterknife, because when I need to use it I create a module, and use:

   ((MyApp) getApplication()).createAppComponent().inject(this);

to use, for example, this:

@Inject
RegisterPresenter presenter;

but I don't understand how to use constructor injection. I've a case(use model-view-presenter):

private Register.View view;
private RegisterModel model;
private StorageModel storageModel;
private DatabaseModel databaseModel;
private Uri compressPath;

List<String > stringList;
String uid;

@Inject
public RegisterPresenter() {
    model = new RegisterModel(this);
    storageModel = new StorageModel(this);
    databaseModel = new DatabaseModel(this);

}

is it correct? Or I need to do it?

 @Inject
    public RegisterPresenter(RegisterModel model, StorageModel storageModel, DatabaseModel databaseModel) {
        this.model = model;
        this.storageModel = storageModel;
        this.databaseModel = databaseModel;
    }

because if I use the second code, in my activity(View) I need to do it:

protected void onResume() {
        super.onResume();
        presenter.setView(this);
    }

so how could construct the Presenter? Or if I need to create this in Activity, is it correct to pass the module from the view?

EDIT: these are my models:

public class FirebaseModel implements Model, FirebaseAuth.AuthStateListener {


    FirebaseAuth auth;

    Presenter presenter;
    FirebaseUser user;

    @Inject
    public FirebaseModel(Presenter presenter) {
        this.presenter = presenter;
        auth = FirebaseAuth.getInstance();

    }


    @Override
    public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
        user = auth.getCurrentUser();
        presenter.updateUser(user);

    }


    @Override
    public void loadUser() {

        auth.addAuthStateListener(this);
    }
}
public class StorageModel implements Register.Storage,OnCompleteListener <UploadTask.TaskSnapshot>{

Register.Presenter presenter;
StorageReference storage;

@Inject
public StorageModel(Register.Presenter presenter) {
    this.presenter = presenter;
    storage = FirebaseStorage.getInstance().getReferenceFromUrl("gs://firebase-happypark.appspot.com");
}



@Override
public void onTryToUpdateUser(Uri path,String uid) {
    if(path != null) {
        StorageReference riversRef = storage.child("uid").child("ImgProfile/" + path.getLastPathSegment());
        UploadTask uploadTask = riversRef.putFile(path);
        Log.d("ssd", "sto qua");
        uploadTask.addOnCompleteListener(this);
     }
 }


//UNNECESSARY

@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {

    if (task.isSuccessful()) {
        presenter.onUploadCompleted();
    } else {
        presenter.onUploadError(task.getException());
    }
}

}

Thank you

nani
  • 382
  • 5
  • 15

1 Answers1

0

Presenter would be something like this:

public class RegisterPresenter implements RegisterContract.Presenter {

private Register.View view;
private RegisterModel model;
private StorageModel storageModel;
private DatabaseModel databaseModel;
private Uri compressPath;

List<String > stringList;
String uid;

@Inject
 public RegisterPresenter(Register.View view, RegisterModel model, StorageModel storageModel, DatabaseModel databaseModel) {

    this.view = view;
    this.model = model;
    this.storageModel = storageModel;
    this.databaseModel = databaseModel;
}

@Override
public void someMethodFromContract(){}

//or anything else you have in mind

}

And then call it in onResume like this

presenter.someMethodFromContract();
tompadre
  • 797
  • 7
  • 22
  • but how Dagger instantiate model, storageModel and databaseModel if I call someMethodFromContract() ? – nani May 19 '17 at 13:21
  • I'm not sure what you mean by "instantiate model"? If you have those storage and database models already done correct, just make some interface with dependency from that models and make inject method in that interface. If you mean how exactly inject into your class then i think your first code line in the question should do the work. – tompadre May 19 '17 at 13:31