Paula Daniela
Paula Daniela

Reputation: 115

Pass an object in android mvp?

recently I been reading about the mvp pattern on Internet and to be honest, it has been a little bit confusing.

I'm trying to re-write an app using the mvp pattern but I reached a point using AsyncTask where I can't figure out how to pass the Object in the Interactor back to the View.

Here'e the code:

View:

public class DetailsActivity extends BaseActivity {

private DetailsPresenter presenter;
private Pet pet;
private TextView name, description, breed, lostAt, age;
private int idList;

@Override
protected void onCreate(Bundle savedInstance) {
    super.onCreate(savedInstance);
    setContentView(R.layout.details_layout);

    DetailsPresenter presenter = new DetailsPresenter();
    Typeface font0 = Typeface.createFromAsset(getAssets(), "fonts/CaviarDreams.ttf");
    Typeface font1 = Typeface.createFromAsset(getAssets(), "fonts/CaviarDreams_Bold.ttf");
    TextView txtDescription = findViewById(R.id.textView8);
    TextView txt1 = findViewById(R.id.textView6); //Age, Type
    TextView txt2 = findViewById(R.id.textView9); //LostAt
    Button btnContact = findViewById(R.id.button6);
    description = findViewById(R.id.details);
    menuRes = R.menu.details_menu;
    name = findViewById(R.id.textView10);
    breed = findViewById(R.id.breed);
    lostAt = findViewById(R.id.lostAt);
    age = findViewById(R.id.age);

    name.setTypeface(font1);
    breed.setTypeface(font0);
    description.setTypeface(font0);
    lostAt.setTypeface(font0);
    txtDescription.setTypeface(font1);
    txt2.setTypeface(font1);
    txt1.setTypeface(font1);
    btnContact.setTypeface(font0);

    idList = getIntent().getExtras().getInt("TAG_LIST");
    id = getIntent().getExtras().getInt("TAG_ID");

    if(idList == 0){
        txt1.setText(R.string.type);
        txt2.setText(R.string.txt2);
    } else{
        txt1.setText(R.string.txt0);
        txt2.setText(null);
    }

    btnContact.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(getApplicationContext(), ChatFragment.class);
            startActivity(intent);
        }
    });

//        Get pet details from database on background
    pet = presenter.getPet(idList, id);
}

@Override
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);

    if(idList == 0){
        name.setText(pet.getName());
        breed.setText("(" + pet.getBreed() + ")");
        description.setText(pet.getDescription());
        lostAt.setText(pet.getLocation());
    }else{
        name.setText(pet.getBreed());
        description.setText(pet.getDescription());
        lostAt.setText(pet.getGender());
        age.setText(pet.getAge());
    }
}

}

Presenter:

public class DetailsPresenter {

private DetailsInteractor interactor;

public Pet getPet(int idList, int id) {

    interactor = new DetailsInteractor(idList, id);
    interactor.execute();

    return interactor.pet;
}

}

Interactor:

public class DetailsInteractor extends AsyncTask<String, String, Pet> {

public Pet pet;
private int idList;
private int id;
private DBAction database;

public DetailsInteractor (int idList, int id) {

    this.idList = idList;
    this.id = id;

    database = new DBAction();
}

@Override
protected Pet doInBackground(String... strings) {

    pet = database.requestItem(idList, id);
    return pet;
}

I need that after getting the data from the database, it updates the View, using object Pet.

Any answers and suggestions will be welcomed, Thanks!

Upvotes: 0

Views: 593

Answers (1)

AnasAbubacker
AnasAbubacker

Reputation: 3597

When You create/initialize a presenter in Activity(This is your view) you should pass the view to the presenter. Something like this.

 DetailsPresenter presenter = new DetailsPresenter(View view);

View can be any object with which you can update the UI or can call the methods in the activity.

Moreover, you have to go through few more good site to learn about MVP.

http://valokafor.com/learn-android-mvp-pattern-example/ this is really nice one.

Upvotes: 1

Related Questions