Android MVP模式简单实践

匿名 (未验证) 提交于 2019-12-03 00:32:02
  1. model:数据层,如从数据库获取数据、或HTTP请求
  2. view:即UI层:只包含Andorid API的调用
  3. presenter:展示层,持有view的对象和model的对象,负责把model层获取的数据展示到view层。

画图来展示就是:

以下以一个简易的知乎日报的实现作为实例:

话不多说,直接上代码。

首先是主页布局:

<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto">      <data />      <LinearLayout xmlns:tools="http://schemas.android.com/tools"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:orientation="vertical"         tools:context="com.py.cheng.nong.xiang.dailyreadjava.ui.MainActivity">          <android.support.v7.widget.Toolbar             android:id="@+id/toolbar"             android:layout_width="match_parent"             android:layout_height="?attr/actionBarSize"             android:background="@color/colorPrimaryDark"             app:titleTextColor="@android:color/white" />          <android.support.v7.widget.RecyclerView             android:id="@+id/story_list"             android:layout_width="match_parent"             android:layout_height="match_parent" />      </LinearLayout>  </layout>

接着是Activity:

public class MainActivity extends BaseActivity<ActivityMainBinding> implements MainView {      MainPresenter presenter;      @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);     }      @Override     public void loadStoryList(StoryAdapter storyAdapter) {         binding.storyList.setAdapter(storyAdapter);     }      @Override     protected int getLayoutId() {         return R.layout.activity_main;     }      @Override     protected void initViews() {         binding.storyList.setLayoutManager(new LinearLayoutManager(this));         setSupportActionBar(binding.toolbar);     }      // 向presenter发送请求     @Override     protected void initData() {         presenter.loadStoryList();     }      @Override     protected void initPresenter() {         presenter = new MainPresenter(this);         presenter.attachView(this);     }  } 

presenter:

public class MainPresenter extends BasePresenter<MainView> {      private Context context;      public MainPresenter(Context context) {         this.context = context;     }      public void loadStoryList() {         HttpClient.simpleGet(SharedConstants.MAIN_URL, new HttpClient.CallBack() {             @Override             public void onSuccess(String data) {                 Date date = JSON.parseObject(data, Date.class);                 StoryAdapter adapter = new StoryAdapter(date.getStories());                 view.loadStoryList(adapter);             }              @Override             public void onFailure(String msg) {                 showToast(context, msg);             }         });     } }

presenter层通过model层获取数据,再通过view对象展示到ui层上

model层的数据获取:

public class HttpClient {      public static void simpleGet(String url, CallBack callBack) {         new AsyncHttpClient().get(url, new AsyncHttpResponseHandler() {             @Override             public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {                 callBack.onSuccess(new String(responseBody));             }              @Override             public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {                 callBack.onFailure(error.getMessage());             }         });     }      public interface CallBack {         /**          * 成功回调          *          * @param data data          */         void onSuccess(String data);          /**          * 失败回调          *          * @param msg 错误信息          */         void onFailure(String msg);     }  }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!