MVP+OkHttp+RecyclerView+BaseActivity
2018-03-02 10:29
363 查看
BaseActivity方法如下:
/**
* 1. 类的用途 把公共方法抽取到基类 抽取基类+泛型
* 2. @author forever
* 3. @date 2018/3/1 11:38
*/
public abstract class BaseActivity<T> extends AppCompatActivity {
//声明p 使用到泛型
public T presenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//加载布局的方法每个activity都有
setContentView(getLayoutId());
presenter = getPresenter();
initView();
getData();
}
//加载布局的方法,返回布局id
public abstract int getLayoutId();
public abstract T getPresenter();
public abstract void initView();
public abstract void getData();
}
BasePersent方法如下:
/**
* 1. 类的用途
* 2. @author forever
* 3. @date 2018/3/16 09:58
*/
public class BasePresenter<V> {
//在父类声明v
public V v;
public void attachView(V v) {
//初始化
this.v = v;
}
Model方法如下:
/**
* 1. 类的用途
* 2. @author forever
* 3. @date 2018/3/1 11:02
*/
public class ShowModel {
//接口回调
private CallBackData callBackData;
public interface CallBackData {
void backData(ShowInfo showInfo);
}
public void setOnCallBackData(CallBackData callBackData) {
this.callBackData = callBackData;
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
ShowInfo showInfo = (ShowInfo) msg.obj;
if (callBackData != null) {
callBackData.backData(showInfo);
}
break;
}
}
};
//获取数据
public void getServerData(int page) {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url(Api.URL+"%E7%A6%8F%E5%88%A9/10/" + page).build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String json = response.body().string();
Gson gson = new Gson();
ShowInfo showInfo = gson.fromJson(json, ShowInfo.class);
//子线程中的数据回调主线程
Message message = new Message();
message.what = 0;
message.obj = showInfo;
handler.sendMessage(message);
}
});
}
}
View方法如下:
public interface ShowView {
void showData(ShowInfo showInfo);
}
presenter方法如下:
/**
* 1. 类的用途
* 2. @author forever
* 3. @date 2018/3/1 11:11
*/
public class ShowPresenter extends BasePresenter<showView>{
//声明v跟m
ShowView showView;
ShowModel showModel;
//初始化view和model
public ShowPresenter(ShowView showView) {
// this.showView = showView;
//在构造方法中赋值
// this.newsView = newsView;
//super代表父类引用
/**
* 父类声明
* 子类创建
* 子类调用
*/
super.attachView(showView);
showModel = new ShowModel();
}
//将p跟m关联
public void relevance(int page) {
showModel.getServerData(page);
//回调数据
showModel.setOnCallBackData(new ShowModel.CallBackData() {
@Override
public void backData(ShowInfo showInfo) {
//v在父类声明
v.showData(showInfo);
}
});
}
}
MainActivity方法如下:
public class MainActivity extends BaseActivity<ShowPresenter> implements ShowView {
private SwipyRefreshLayout srl;
private RecyclerView rv;
private int page = 1;
private Handler handler = null;
private List<ShowInfo.ResultsBean> lists = null;
/* @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//将p跟v关联起来
*//*ShowPresenter showPresenter = new ShowPresenter(this);
showPresenter.relevance(page);*//*
}*/
@Override
public int getLayoutId() {
return R.layout.activity_main;
}
@Override
public ShowPresenter getPresenter() {
//实例化 同时关联p跟v
presenter = new ShowPresenter(this);
return presenter;
}
@Override
public void initView() {
handler = new Handler();
srl = (SwipyRefreshLayout) findViewById(R.id.srl);
rv = (RecyclerView) findViewById(R.id.rv);
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
rv.setLayoutManager(gridLayoutManager);
//设置刷新效果的颜色
srl.setColorSchemeResources(R.color.colorAccent, R.color.colorPrimary, R.color.colorPrimaryDark, android.R.color.darker_gray);
//设置支持下拉刷新,上拉加载
srl.setDirection(SwipyRefreshLayoutDirection.BOTH);
//设置刷新的监听
srl.setOnRefreshListener(new SwipyRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh(int index) {
page = 1;
presenter.relevance(page);
//延迟2秒停止刷新
handler.postDelayed(new Runnable() {
@Override
public void run() {
srl.setRefreshing(false);
}
}, 2000);
}
@Override
public void onLoad(int index) {
page++;
presenter.relevance(page);
//延迟2秒停止刷新
handler.postDelayed(new Runnable() {
@Override
public void run() {
srl.setRefreshing(false);
}
}, 2000);
}
});
}
@Override
public void getData() {
//默认获取第一页数据
presenter.relevance(page);
}
//把数据回调view
@Override
public void showData(ShowInfo showInfo) {
//把数据获取到的给适配器
Toast.makeText(this, "数据获取成功:" + showInfo.getResults().get(0).getSource(), Toast.LENGTH_SHORT).show();
//分页加载
List<ShowInfo.ResultsBean> results = showInfo.getResults();
if (page == 1) {
//第一页的时候创建一个集合
lists = new ArrayList<>();
}
//累加数据
lists.addAll(results);
ShowAdapter adapter = new ShowAdapter(this, lists);
rv.setAdapter(adapter);
}
}
/**
* 1. 类的用途 把公共方法抽取到基类 抽取基类+泛型
* 2. @author forever
* 3. @date 2018/3/1 11:38
*/
public abstract class BaseActivity<T> extends AppCompatActivity {
//声明p 使用到泛型
public T presenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//加载布局的方法每个activity都有
setContentView(getLayoutId());
presenter = getPresenter();
initView();
getData();
}
//加载布局的方法,返回布局id
public abstract int getLayoutId();
public abstract T getPresenter();
public abstract void initView();
public abstract void getData();
}
BasePersent方法如下:
/**
* 1. 类的用途
* 2. @author forever
* 3. @date 2018/3/16 09:58
*/
public class BasePresenter<V> {
//在父类声明v
public V v;
public void attachView(V v) {
//初始化
this.v = v;
}
Model方法如下:
/**
* 1. 类的用途
* 2. @author forever
* 3. @date 2018/3/1 11:02
*/
public class ShowModel {
//接口回调
private CallBackData callBackData;
public interface CallBackData {
void backData(ShowInfo showInfo);
}
public void setOnCallBackData(CallBackData callBackData) {
this.callBackData = callBackData;
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
ShowInfo showInfo = (ShowInfo) msg.obj;
if (callBackData != null) {
callBackData.backData(showInfo);
}
break;
}
}
};
//获取数据
public void getServerData(int page) {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url(Api.URL+"%E7%A6%8F%E5%88%A9/10/" + page).build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String json = response.body().string();
Gson gson = new Gson();
ShowInfo showInfo = gson.fromJson(json, ShowInfo.class);
//子线程中的数据回调主线程
Message message = new Message();
message.what = 0;
message.obj = showInfo;
handler.sendMessage(message);
}
});
}
}
View方法如下:
public interface ShowView {
void showData(ShowInfo showInfo);
}
presenter方法如下:
/**
* 1. 类的用途
* 2. @author forever
* 3. @date 2018/3/1 11:11
*/
public class ShowPresenter extends BasePresenter<showView>{
//声明v跟m
ShowView showView;
ShowModel showModel;
//初始化view和model
public ShowPresenter(ShowView showView) {
// this.showView = showView;
//在构造方法中赋值
// this.newsView = newsView;
//super代表父类引用
/**
* 父类声明
* 子类创建
* 子类调用
*/
super.attachView(showView);
showModel = new ShowModel();
}
//将p跟m关联
public void relevance(int page) {
showModel.getServerData(page);
//回调数据
showModel.setOnCallBackData(new ShowModel.CallBackData() {
@Override
public void backData(ShowInfo showInfo) {
//v在父类声明
v.showData(showInfo);
}
});
}
}
MainActivity方法如下:
public class MainActivity extends BaseActivity<ShowPresenter> implements ShowView {
private SwipyRefreshLayout srl;
private RecyclerView rv;
private int page = 1;
private Handler handler = null;
private List<ShowInfo.ResultsBean> lists = null;
/* @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//将p跟v关联起来
*//*ShowPresenter showPresenter = new ShowPresenter(this);
showPresenter.relevance(page);*//*
}*/
@Override
public int getLayoutId() {
return R.layout.activity_main;
}
@Override
public ShowPresenter getPresenter() {
//实例化 同时关联p跟v
presenter = new ShowPresenter(this);
return presenter;
}
@Override
public void initView() {
handler = new Handler();
srl = (SwipyRefreshLayout) findViewById(R.id.srl);
rv = (RecyclerView) findViewById(R.id.rv);
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 2);
rv.setLayoutManager(gridLayoutManager);
//设置刷新效果的颜色
srl.setColorSchemeResources(R.color.colorAccent, R.color.colorPrimary, R.color.colorPrimaryDark, android.R.color.darker_gray);
//设置支持下拉刷新,上拉加载
srl.setDirection(SwipyRefreshLayoutDirection.BOTH);
//设置刷新的监听
srl.setOnRefreshListener(new SwipyRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh(int index) {
page = 1;
presenter.relevance(page);
//延迟2秒停止刷新
handler.postDelayed(new Runnable() {
@Override
public void run() {
srl.setRefreshing(false);
}
}, 2000);
}
@Override
public void onLoad(int index) {
page++;
presenter.relevance(page);
//延迟2秒停止刷新
handler.postDelayed(new Runnable() {
@Override
public void run() {
srl.setRefreshing(false);
}
}, 2000);
}
});
}
@Override
public void getData() {
//默认获取第一页数据
presenter.relevance(page);
}
//把数据回调view
@Override
public void showData(ShowInfo showInfo) {
//把数据获取到的给适配器
Toast.makeText(this, "数据获取成功:" + showInfo.getResults().get(0).getSource(), Toast.LENGTH_SHORT).show();
//分页加载
List<ShowInfo.ResultsBean> results = showInfo.getResults();
if (page == 1) {
//第一页的时候创建一个集合
lists = new ArrayList<>();
}
//累加数据
lists.addAll(results);
ShowAdapter adapter = new ShowAdapter(this, lists);
rv.setAdapter(adapter);
}
}
相关文章推荐
- Android当中的MVP模式(六)View 层 Activity 的基类--- BaseMvpActivity 的封装
- 使用MVP注册登录模块+封装的OKhttp,拦截器+QQ第三方登录+RecyclerView+SpringView上拉加载下拉刷新网络数据
- MVP+OKhttp,拦截器+Rxjava+RecyclerView 全选反选,隐藏,显示切换标题
- mvp+Recyclerview+okhttp+Springview
- BaseMvp+rxjava+retrofit+recyclerview
- 实战MVP请求数据OKHttp封装RecyclerView上拉刷新下拉加载
- Retrofit2 + RxJava + Okhttp + RecyclerView用MVP架构展示数据
- Mvp+RecyclerView+Okhttp
- MVP+OKHTTP+Fresco+RecyclerView+EventBus实现点击传值
- Android——MVP+xRecyclerView+Retrofit+OkHttp+RxJava结合应用
- mvp+okhttp+recyclerview
- OKhttp,MVP,RecyclerView,联合使用,点击条目进入详情页
- RecyclerView+MVP+OKhttp
- Android——MVP架构OkHttp的二次封装以及RecyclerView的使用
- MVP架构分包+OkHttp网络请求+RecyclerView展示数据
- MVP架构分包+OkHttp网络请求数据并展示到xrecyclerview上
- 单列模式,RecyclerView适配器封装,BroadcastReceiver介绍,Mvp+Retrofit+rxjava+okhttp框架的梳理总结
- MVP+XRecyclerView+okhttp+glide,列表或者网格显示所加载的数据
- 购物车页面实现 :Okhttp+mvp+RecyclerView
- MVP+Rxjava+Okhttp+Retrofit+XRecyclerview请求数据