Search code examples
androidretrofit2android-annotations

Model View Presenter with AA and Retrofit, not get data


i triying to do a simple MVP in Android using AndroidAnnotations and Retrofit2, But I never get the information.

Code Presenter:

public class ListHomePresenter {


private List<Post> mPost;
Client client;
int error_code = 0;
String error_msg = "";

/**
 * TODO: get all post
 * */
public List<Post> getPost() throws SampleExceptions{
    RestService restService;
    client = new Client();
    restService = client.getApi();

    Call<List<Post>> task = restService.downloadPost();

    task.enqueue(new Callback<List<Post>>() {
        @Override
        public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
            mPost = response.body();
        }

        @Override
        public void onFailure(Call<List<Post>> call, Throwable t) {
            mPost = null;

            error_code = 1; // error
            error_msg = t.getMessage(); // message
        }
    });

    if(error_code == 1 )
        throw new SampleExceptions(error_code, "Error");

    return mPost;
}

}

Code Activity

@EActivity(R.layout.activity_home)

public class HomeActivity extends AppCompatActivity {

@ViewById(R.id.rvPosts)
RecyclerView mRvPost;

PostAdapter mPostAdapter;

ListHomePresenter mListHomePresenter;

private StaggeredGridLayoutManager gaggeredGridLayoutManager;

@AfterViews
void setupHome(){
    downloadPost();
}


@UiThread(propagation = Propagation.REUSE)
void downloadPost(){
    try{
        mListHomePresenter = new ListHomePresenter();
        gaggeredGridLayoutManager = new StaggeredGridLayoutManager(2, 1);
        mRvPost.setLayoutManager(gaggeredGridLayoutManager);
        mPostAdapter = new PostAdapter(HomeActivity.this, mListHomePresenter.getPost());
        mRvPost.setAdapter( mPostAdapter );

    }catch (SampleExceptions e){

    }
}

}

but, ever i getting the null data.

Help Me!


Solution

  • Here an example:

    Presenter:

        public class ListHomePresenter {
    
            private List<Post> mPost;
            Client client;
            int error_code = 0;
            String error_msg = "";
            HomeView view;
    
            public ListHomePresenter(HomeView view) {
              this.view = view;
            }
    
            /**
             * TODO: get all post
             * */
            public void loadPost() throws SampleExceptions{
                RestService restService;
                client = new Client();
                restService = client.getApi();
    
                Call<List<Post>> task = restService.downloadPost();
    
                task.enqueue(new Callback<List<Post>>() {
                    @Override
                    public void onResponse(Call<List<Post>> call, Response<List<Post>> response) {
                        view.retrieveData(response.body());
                    }
    
                    @Override
                    public void onFailure(Call<List<Post>> call, Throwable t) {
                        mPost = null;
    
                        error_code = 1; // error
                        error_msg = t.getMessage(); // message
                    }
                });
    
                if(error_code == 1 )
                    throw new SampleExceptions(error_code, "Error");
            }
    
    }
    

    Activity:

    @ViewById(R.id.rvPosts)
    RecyclerView mRvPost;
    
    PostAdapter mPostAdapter;
    
    ListHomePresenter mListHomePresenter;
    
    private StaggeredGridLayoutManager gaggeredGridLayoutManager;
    
    @AfterViews
    void setupHome() {
        downloadPost();
    }
    
    
    @UiThread(propagation = Propagation.REUSE)
    void downloadPost() {
        try {
            mListHomePresenter = new ListHomePresenter(this);
            mListHomePresenter.loadPost()
        } catch (SampleExceptions e) {
    
        }
    }
    
    // Method implemented from view interface
    @Override
    void retrieveData(List<Post> postList) {
      gaggeredGridLayoutManager = new StaggeredGridLayoutManager(2, 1);
      mRvPost.setLayoutManager(gaggeredGridLayoutManager);
      mPostAdapter = new PostAdapter(HomeActivity.this, postList);
      mRvPost.setAdapter(mPostAdapter);
    }
    

    Only you needs implement an interface view to interacts between two classes