我们先来看一下我们需要的依赖:
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、适配器中的代码了。记得要添加网络权限!