MVP+Fresco+RxJava

来源:互联网 发布:阿里云配置tomcat教程 编辑:程序博客网 时间:2024/06/05 05:53
我们先来看一下我们需要的依赖:    implementation 'com.android.support:recyclerview-v7:26.1.0'    implementation 'io.reactivex.rxjava2:rxjava:2.1.6'    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'    implementation 'com.facebook.fresco:fresco:0.11.0'在这中间还有RecyclerView的依赖。
现在我们来看一下model层:import com.honey.mvpmvp.app.App;import okhttp3.Callback;import xp.code.okhttp3.utils.OkHttp3Utils;public class NewModel implements IModel{    @Override    public void getData(Callback callback) {        OkHttp3Utils.doPost(App.URL_POST,null,null,callback);    }}
model层的接口:import okhttp3.Callback;public interface IModel {    //获取数据    void getData(Callback callback);}
p层:import android.content.Context;import android.util.Log;import com.google.gson.Gson;import com.honey.mvpmvp.entity.EntityNews;import com.honey.mvpmvp.model.NewModel;import com.honey.mvpmvp.view.IView;import java.io.IOException;import java.util.List;import io.reactivex.Observable;import io.reactivex.ObservableEmitter;import io.reactivex.ObservableOnSubscribe;import io.reactivex.Observer;import io.reactivex.android.schedulers.AndroidSchedulers;import io.reactivex.disposables.Disposable;import io.reactivex.schedulers.Schedulers;import okhttp3.Call;import okhttp3.Callback;import okhttp3.Response;public class NewsPresenter {    private Context context;    private NewModel model;    private IView view;    public NewsPresenter(Context context,IView view) {        this.context = context;        this.model = new NewModel();        this.view = view;    }    public void getDataOK(){        Observable.create(new ObservableOnSubscribe<List<EntityNews.ResultBean.DataBean>>() {            @Override            public void subscribe(final ObservableEmitter<List<EntityNews.ResultBean.DataBean>> e) throws Exception {                model.getData(new Callback() {                    @Override                    public void onFailure(Call call, IOException e) {                    }                    @Override                    public void onResponse(Call call, Response response) throws IOException {                        String string = response.body().string();                        Gson gson=new Gson();                        EntityNews entityNews = gson.fromJson(string, EntityNews.class);                        List<EntityNews.ResultBean.DataBean> data = entityNews.getResult().getData();                        e.onNext(data);//将集合传给观察者的onnext方法,是数据回到主线程                        e.onComplete();//关闭                    }                });            }        }).subscribeOn(Schedulers.io())//子线程          .observeOn(AndroidSchedulers.mainThread())//主          .subscribe(new Observer<List<EntityNews.ResultBean.DataBean>>() {                    @Override                    public void onSubscribe(Disposable d) {                    }                    @Override                    public void onNext(List<EntityNews.ResultBean.DataBean> dataBeans) {                        Log.i("==dataBeans==", dataBeans+"");                        //做view层的操作,将集合的返回的类型给view层展示                        view.showData(dataBeans);                    }                    @Override                    public void onError(Throwable e) {                    }                    @Override                    public void onComplete() {                    }          });    }}
v层的接口:import com.honey.mvpmvp.entity.EntityNews;import java.util.List;public interface IView {    void showData(List<EntityNews.ResultBean.DataBean> dataList);}
MainActivity中的数据代码:import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.util.Log;import com.honey.mvpmvp.adapter.RecyclerViewAdapter;import com.honey.mvpmvp.entity.EntityNews;import com.honey.mvpmvp.presenter.NewsPresenter;import com.honey.mvpmvp.view.IView;import java.util.List;public class MainActivity extends AppCompatActivity implements IView{    private RecyclerView recyclerView;    private RecyclerViewAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //初始化控件        initView();        //new一个p层的对象        NewsPresenter presenter=new NewsPresenter(MainActivity.this,this);        //p层对象调用p层网络请求的数据        presenter.getDataOK();    }    /**     * 获取控件     */    private void initView() {        recyclerView=findViewById(R.id.recyclerView);        //RecyclerView的管理        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);        recyclerView.setLayoutManager(linearLayoutManager);    }    @Override    public void showData(List<EntityNews.ResultBean.DataBean> dataList) {        Log.i("==dataList==",dataList.size()+" ");        adapter = new RecyclerViewAdapter(MainActivity.this,dataList);        recyclerView.setAdapter(adapter);    }}
剩下就是bean类、app、适配器中的代码了。记得要添加网络权限!







原创粉丝点击