2019-10-10

MVP模型加载网络数据的页面展示

1.首先导入所需依赖包

2.创建三个包M层:model    V层:view    P层:presenter

在model中创建一个bean包和一个service包,在bean包中创建实体类,在service包中创建ApiService接口

代码如下:

package com.example.administrator.day11_mvp.model.service;

import com.example.administrator.day11_mvp.model.bean.DataInfos;

import io.reactivex.Observable;

import retrofit2.http.GET;

/**

* Created by Administrator on 2019/10/9 0009.

*/

public interface ApiService {

@GET("nc/article/list/T1349837698345/0-20.html")

Observable requestDataInfos();

}

3.在model层中创建MainModel类进行网络请求

代码如下:

package com.example.administrator.day11_mvp.model;

import com.example.administrator.day11_mvp.model.bean.DataInfos;

import com.example.administrator.day11_mvp.model.service.ApiService;

import org.reactivestreams.Subscriber;

import java.util.ArrayList;

import java.util.List;

import io.reactivex.Observable;

import io.reactivex.Observer;

import io.reactivex.android.schedulers.AndroidSchedulers;

import io.reactivex.disposables.Disposable;

import io.reactivex.schedulers.Schedulers;

import retrofit2.Retrofit;

import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;

import retrofit2.converter.gson.GsonConverterFactory;

/**

* Created by Administrator on 2019/10/9 0009.

*/

public class MainModel {

private ListmDisposableList =new ArrayList<>();

public void dispose(){

for (Disposable disposable :mDisposableList) {

disposable.dispose();

}

}

public void requestDataInfos(final MainCallBack mainCallBack){

Retrofit retrofit =new Retrofit.Builder()

.baseUrl("http://c.m.163.com/")

.addConverterFactory(GsonConverterFactory.create())

.addCallAdapterFactory(RxJava2CallAdapterFactory.create())

.build();

ApiService service = retrofit.create(ApiService.class);

Observable observable = service.requestDataInfos();

observable.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe(new Observer() {

@Override

                    public void onSubscribe(Disposable disposable) {

}

@Override

                    public void onNext(DataInfos dataInfos) {

if (mainCallBack!=null){

if (dataInfos!=null){

mainCallBack.onRequestSuccess(dataInfos);

}

}

}

@Override

                    public void onError(Throwable e) {

if (mainCallBack!=null){

if (e!=null){

mainCallBack.onRequestFiulure(e);

}

}

}

@Override

                    public void onComplete() {

for (Disposable disposable :mDisposableList) {

disposable.dispose();

}

}

});

}

}

4.在请求网络数据的时候需要创建一个MainCallBack接口,用来将M层的数据传递到P层

代码如下:

package com.example.administrator.day11_mvp.model;

import com.example.administrator.day11_mvp.model.bean.DataInfos;

/**

* Created by Administrator on 2019/10/9 0009.

*/

public interface MainCallBack {

void onRequestSuccess(DataInfos dataInfos);

void onRequestFiulure(Throwable e);

}

5.在Presenter中创建MainPresenter类,用来接收P层传递的数据

代码如下:

package com.example.administrator.day11_mvp.presenter;

import com.example.administrator.day11_mvp.model.MainCallBack;

import com.example.administrator.day11_mvp.model.MainModel;

import com.example.administrator.day11_mvp.model.bean.DataInfos;

import com.example.administrator.day11_mvp.view.MainView;

/**

* Created by Administrator on 2019/10/9 0009.

*/

public class MainPresenter {

private MainModelmMainModel;

private MainViewmMainView;

public MainPresenter() {

}

public void addView(MainView mainView){

mMainView = mainView;

}

public void removeView(){

mMainView =null;

}

public void requestDataInfos(){

mMainModel =new MainModel();

mMainModel.requestDataInfos(new MainCallBack() {

@Override

            public void onRequestSuccess(DataInfos dataInfos) {

if (mMainView!=null){

if (dataInfos!=null){

mMainView.onRequestSuccess(dataInfos);

}

}

}

@Override

            public void onRequestFiulure(Throwable e) {

if (mMainView!=null){

if (e!=null){

mMainView.onRequestFiulure(e);

}

}

}

});

}

public void dispose(){

mMainModel.dispose();

}

}

6.在V层创建MainView接口,利用接口回调机制,在activity中接受P层的数据

代码如下:

package com.example.administrator.day11_mvp.view.activity;

import android.annotation.SuppressLint;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.support.annotation.NonNull;

import android.support.v7.app.AppCompatActivity;

import android.support.v7.widget.DividerItemDecoration;

import android.support.v7.widget.LinearLayoutManager;

import android.support.v7.widget.RecyclerView;

import com.example.administrator.day11_mvp.R;

import com.example.administrator.day11_mvp.model.bean.DataInfos;

import com.example.administrator.day11_mvp.presenter.MainPresenter;

import com.example.administrator.day11_mvp.view.MainView;

import com.example.administrator.day11_mvp.view.adapter.MyRecyclerAdapter;

import com.scwang.smartrefresh.layout.SmartRefreshLayout;

import com.scwang.smartrefresh.layout.api.RefreshLayout;

import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener;

import java.util.ArrayList;

public class MainActivityextends AppCompatActivityimplements MainView, OnRefreshLoadMoreListener {

private RecyclerViewmRecyclerView;

private MainPresentermMainPresenter;

private ArrayListmDataList;

private MyRecyclerAdaptermMyRecyclerAdapter;

@SuppressLint("HandlerLeak")

private HandlermHandler =new Handler() {

@Override

        public void handleMessage(Message msg) {

super.handleMessage(msg);

if (msg.what ==1) {

mMyRecyclerAdapter.notifyDataSetChanged();

}

}

};

private SmartRefreshLayoutmSmart;

@Override

    protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

mMainPresenter =new MainPresenter();

mMainPresenter.addView(this);

mMainPresenter.requestDataInfos();

}

private void initView() {

mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);

mRecyclerView.setLayoutManager(new LinearLayoutManager(this));

mDataList =new ArrayList<>();

mMyRecyclerAdapter =new MyRecyclerAdapter(this,mDataList);

mRecyclerView.setAdapter(mMyRecyclerAdapter);

mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));

mSmart = (SmartRefreshLayout) findViewById(R.id.smart);

mSmart.setOnRefreshLoadMoreListener(this);

}

@Override

    public void onRequestSuccess(DataInfos dataInfos) {

mDataList.addAll(dataInfos.getT1349837698345());

mHandler.sendEmptyMessage(1);

}

@Override

    public void onRequestFiulure(Throwable e) {

}

@Override

    protected void onDestroy() {

super.onDestroy();

mMainPresenter.removeView();

mMainPresenter.dispose();

}

@Override

    public void onLoadMore(@NonNull RefreshLayout refreshLayout) {

mMainPresenter.requestDataInfos();

mSmart.autoLoadMore();

mSmart.finishLoadMore(true);

}

@Override

    public void onRefresh(@NonNull RefreshLayout refreshLayout) {

mMainPresenter.requestDataInfos();

mSmart.autoRefresh();

mSmart.finishRefresh(true);

}

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容