下面看看什么是mvp:
View:对应Activity,负责View的显示绘制以及用户的交互Model:业务逻辑和实体模型Presenter:负责完成View与Model之间的交互 下面看看我的代码结构: 其中的Model ,adapter和api中的代码没有变化还是上一篇文章的代码,这里新添加了presenter以及其实现类impl包,View包,重构了上一篇的代码 下面就是mvp实现的过程了,首先要创建一个View包,在创建一个接口类和他对应的activity同名,这里我们叫MainView,下面看看MainView的代码吧 package ledon.com.retrofitdemo.view; import java.util.List; import ledon.com.retrofitdemo.MovieBean; /** * Created by Administrator on 2017/3/13. */ public interface MainView { void onClickGetMovie(List<MovieBean.SubjectsBean>list,boolean success); } 接下来就看一看我们的presenter层的实现了,MainPersenter的接口: package ledon.com.retrofitdemo.presenter; /** * Created by Administrator on 2017/3/13. */ public interface MainPresenter { void clickGetMovie(); } 接下来看看presenter的实现类MainPresenterImpl,这个类要实现MainPresenter接口,具体实现代码如下: package ledon.com.retrofitdemo.presenter.impl; import android.widget.Toast; import java.util.List; import ledon.com.retrofitdemo.MainActivity; import ledon.com.retrofitdemo.MovieBean; import ledon.com.retrofitdemo.adapter.MovieAdapter; import ledon.com.retrofitdemo.api.HttpMethods; import ledon.com.retrofitdemo.presenter.MainPresenter; import ledon.com.retrofitdemo.view.MainView; import rx.Subscriber; /** * Created by Administrator on 2017/3/13. */ public class MainPresenterImpl implements MainPresenter { private MainView mainView; private Subscriber<MovieBean> subscriber; private List<MovieBean.SubjectsBean> list; public MainPresenterImpl(MainView mainView) { this.mainView = mainView; } @Override public void clickGetMovie() { getMovie(); } /** * 获取电影的列表 */ private void getMovie() { subscriber = new Subscriber<MovieBean>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { mainView.onClickGetMovie(null,false); } @Override public void onNext(MovieBean movieBean) { list = movieBean.getSubjects(); //把集合传到Activity 让listview显示出来 mainView.onClickGetMovie(list,true); } }; HttpMethods.getInstance().getTopMovie(subscriber, 0, 10); } } 最后我们看一下我们重构的MainActivity了,我们要在里边实现MainView这个接口,在onCreate里边 new 出来这个实体presenter = new MainPresenterImpl(this);当我们点击获取网络数据的按钮的时候,在onclick中添加presenter.clickGetMovie(); 下面我们看一下最终的实现了: package ledon.com.retrofitdemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.widget.Button; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.Toast; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; import ledon.com.retrofitdemo.adapter.MovieAdapter; import ledon.com.retrofitdemo.api.HttpMethods; import ledon.com.retrofitdemo.presenter.MainPresenter; import ledon.com.retrofitdemo.presenter.impl.MainPresenterImpl; import ledon.com.retrofitdemo.view.MainView; import rx.Subscriber; public class MainActivity extends AppCompatActivity implements MainView{ @Bind(R.id.click_me_BN) Button clickMeBN; @Bind(R.id.result_TV) ListView resultTV; @Bind(R.id.activity_main) RelativeLayout activityMain; private MainPresenter presenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); presenter = new MainPresenterImpl(this); } /** * 点击获取网络数据 */ @OnClick(R.id.click_me_BN) public void onClick() { presenter.clickGetMovie(); } /** * 利用mvp模式来判断是否网络请求成功 * @param list * @param success */ @Override public void onClickGetMovie(List<MovieBean.SubjectsBean> list, boolean success) { if (success){ MovieAdapter movieAdapter = new MovieAdapter(MainActivity.this, list); resultTV.setAdapter(movieAdapter); }else{ Toast.makeText(this,"请求失败",Toast.LENGTH_SHORT).show(); } } } 经过漫长的重构,我们的MVP+Retrofit+Rxjava框架实现了漫长的筹够过程,下面我们就看一看最后的效果吧 到这里我们已经成功的完成了所有的重构了,欢迎大家给出指导意见!