MVP架构分包+OkHttp网络请求数据并展示到xrecyclerview上
2017-12-07 19:24
796 查看
先看效果首先要添加依赖compile 'com.github.bumptech.glide:glide:3.7.0'compile 'com.squareup.okhttp3:okhttp:3.9.0'compile 'com.google.code.gson:gson:2.6.1'compile 'com.jcodecraeer:xrecyclerview:1.3.2'网络权限也不能忘
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
先看看MVP的分包
先看Model层的IRecyModel
import okhttp3.Callback;/*** Created by BAIPEI on 2017/12/7.*/public interface IRecyModel {void recy(Callback callback);}
再看IRecyModel接口的实现类
import bwie.com.mvp.utils.OkHttpUtils;import okhttp3.Callback;/*** Created by BAIPEI on 2017/12/7.*/public class RecyModel implements IRecyModel {@Overridepublic void recy(Callback callback) {OkHttpUtils.getInstance().doGet("http://m.yunifang.com/yunifang/mobile/home", callback);}}接下来我们来看view层IRecyView
import bwie.com.mvp.bean.InfoDatas;/*** Created by BAIPEI on 2017/12/7.*/public interface IRecyView {void showRecy(InfoDatas infoDatas);}下面就到了Presenter层
import android.util.Log;import com.google.gson.Gson;import java.io.IOException;import bwie.com.mvp.bean.InfoDatas;import bwie.com.mvp.model.IRecyModel;import bwie.com.mvp.model.RecyModel;import bwie.com.mvp.utils.OnUiCallback;import bwie.com.mvp.view.IRecyView;import okhttp3.Call;/*** Created by BAIPEI on 2017/12/7.*/public class RecyPresenter {private IRecyView view;private IRecyModel model;public RecyPresenter(IRecyView view) {this.view = view;model = new RecyModel();}public void showRecy(){model.recy(new OnUiCallback() {private InfoDatas infoDatas;@Overridepublic void onFailed(Call call, IOException e) {}@Overridepublic void onSuccess(String result) throws IOException {Log.i("ss",result);Gson gson = new Gson();infoDatas = gson.fromJson(result, InfoDatas.class);view.showRecy(infoDatas);}});}//解绑public void onDestory(){view = null;}}
OkHttpUtils
切记这里的Handler 导的是import android.os.Handler;这个包import android.os.Handler;import android.os.Looper;import okhttp3.Call;import okhttp3.Callback;import okhttp3.OkHttpClient;import okhttp3.Request;/*** Created by BAIPEI on 2017/12/7.*/public class OkHttpUtils {private Handler handler = new Handler(Looper.getMainLooper());public Handler getHandler(){return handler;}//单例private static OkHttpUtils okHttpUtils = new OkHttpUtils();private OkHttpUtils(){};public static OkHttpUtils getInstance(){return okHttpUtils;}private OkHttpClient client;private void initOkHttpClient(){if(client == null){client = new OkHttpClient.Builder().build();}}//公用的get请求方法 完成的功能不确定public void doGet(String url, Callback callback){initOkHttpClient();Request request = new Request.Builder().addHeader("User-Agent","").url(url).build();Call call = client.newCall(request);call.enqueue(callback);}}
OnUiCallback
import android.os.Handler;import java.io.IOException;import okhttp3.Call;import okhttp3.Callback;import okhttp3.Response;/*** Created by BAIPEI on 2017/12/7.*/public abstract class OnUiCallback implements Callback {private Handler handler = OkHttpUtils.getInstance().getHandler();public abstract void onFailed(Call call, IOException e);public abstract void onSuccess(String result) throws IOException;@Overridepublic void onFailure(final Call call, final IOException e) {//该方式 存在问题 网络请求也跑到了主线程 待解决//该方法就是把 线程post到handler所在的线程handler.post(new Runnable() {@Overridepublic void run() {onFailed(call, e);}});}@Overridepublic void onResponse(final Call call, final Response response) throws IOException {final String result = response.body().string();//该方式 存在问题 网络请求也跑到了主线程 待解决handler.post(new Runnable() {@Overridepublic void run() {try {onSuccess(result);} catch (IOException e) {e.printStackTrace();}}});}}到了RecyActivity
import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.LinearLayoutManager;import com.jcodecraeer.xrecyclerview.XRecyclerView;import bwie.com.mvp.adapder.MyRecyAdapter;import bwie.com.mvp.bean.InfoDatas;import bwie.com.mvp.presenter.RecyPresenter;import bwie.com.mvp.view.IRecyView;public class RecyActivity extends AppCompatActivity implements IRecyView {private XRecyclerView xrv;private RecyPresenter presenter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_recy);initView();presenter = new RecyPresenter(this);presenter.showRecy();}private void initView() {xrv = (XRecyclerView) findViewById(R.id.xrv);LinearLayoutManager manager = new LinearLayoutManager(this);manager.setOrientation(LinearLayoutManager.VERTICAL);xrv.setLayoutManager(manager);//下面是加载更多的方法}@Overridepublic void showRecy(InfoDatas infoDatas) {MyRecyAdapter myRecyAdapter = new MyRecyAdapter(this, infoDatas);xrv.setAdapter(myRecyAdapter);}}下面是适配器Adapter
import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import com.bumptech.glide.Glide;import bwie.com.mvp.R;import bwie.com.mvp.bean.InfoDatas;/*** Created by BAIPEI on 2017/12/7.*/public class MyRecyAdapter extends RecyclerView.Adapter<MyRecyAdapter.MyViewHolder> {private Context context;private InfoDatas infoDatas;public MyRecyAdapter(Context context, InfoDatas infoDatas) {this.context = context;this.infoDatas = infoDatas;}@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = LayoutInflater.from(context).inflate(R.layout.recy_item, parent, false);MyViewHolder holder = new MyViewHolder(view);return holder;}@Overridepublic void onBindViewHolder(MyViewHolder holder, int position) {Glide.with(context).load(infoDatas.data.defaultGoodsList.get(position).goods_img).into(holder.iv_item);holder.tv_item.setText(infoDatas.data.defaultGoodsList.get(position).goods_name);}@Overridepublic int getItemCount() {return infoDatas.data.defaultGoodsList.size();}static class MyViewHolder extends RecyclerView.ViewHolder{ImageView iv_item;TextView tv_item;public MyViewHolder(View itemView) {super(itemView);iv_item = itemView.findViewById(R.id.iv_item);tv_item = itemView.findViewById(R.id.tv_item);}}}下面是bean类
import java.util.List;/*** Created by BAIPEI on 2017/12/7.*/public class InfoDatas {public int code;public String msg;public DataEntity data;public static class DataEntity {public ActivityInfoEntity activityInfo;public boolean creditRecived;public GoodsSpreeActivityEntity goodsSpreeActivity;public SecondAdEntity secondAd;public List<SubjectsEntity> subjects;public List<Ad1Entity> ad1;public List<Ad5Entity> ad5;public List<Ad8Entity> ad8;public List<DefaultGoodsListEntity> defaultGoodsList;public static class ActivityInfoEntity {public String activityAreaDisplay;public List<ActivityInfoListEntity> activityInfoList;public static class ActivityInfoListEntity {public String id;public String activityImg;public String activityType;public String activityData;public String activityDataDetail;public String activityAreaDisplay;public String countDownEnable;public String remark;public int sort;}}public static class GoodsSpreeActivityEntity {public String id;public String name;public String startDate;public String endDate;public String status;public String startSeconds;public String endSeconds;public String isChecked;public List<GoodsListEntity> goodsList;public static class GoodsListEntity {public String id;public String goodsSpreeId;public String goodsId;public String goodsName;public String goodsImg;public double marketPrice;public double activityPrice;public int salesRatio;public int stockNumber;public int releaseNumber;}}public static class SecondAdEntity {public String id;public String image;public int ad_type;public int sort;public int position;public int enabled;public String ad_type_dynamic;public String ad_type_dynamic_data;public String ad_type_dynamic_detail;public GoodsEntity goods;public static class GoodsEntity {public int collect_count;public boolean reservable;public int restriction;public int restrict_purchase_num;public boolean is_coupon_allowed;public int allocated_stock;public int is_gift;}}public static class SubjectsEntity {public String id;public String title;public String detail;public String image;public String start_time;public String end_time;public int show_number;public String state;public int sort;public String descImage;public String template;public String url;public String wapUrl;public List<GoodsListEntity> goodsList;public List<String> goodsIdsList;public List<GoodsRelationListEntity> goodsRelationList;public static class GoodsListEntity {public String id;public String goods_name;public double shop_price;public double market_price;public String goods_img;public boolean reservable;public String efficacy;public int stock_number;public int restrict_purchase_num;public String goodsName;public String goodsImage;public String description;}public static class GoodsRelationListEntity {public String id;public String subject_id;public String goods_id;public String goodsName;public String goodsImage;public String description;}}public static class Ad1Entity {public String id;public String createtime;public String lastupdatetime;public String image;public int ad_type;public int sort;public int position;public int enabled;public String createuser;public String lastupdateuser;public String ad_type_dynamic;public String ad_type_dynamic_data;public String ad_type_dynamic_detail;public String show_channel;public String title;public String channelType;}public static class Ad5Entity {public String id;public String image;public int ad_type;public int sort;public int position;public int enabled;public String ad_type_dynamic;public String ad_type_dynamic_data;public String ad_type_dynamic_detail;public String show_channel;public String title;}public static class Ad8Entity {public String id;public String image;public int ad_type;public int sort;public int position;public int enabled;public String description;public String ad_type_dynamic;public String ad_type_dynamic_data;public String ad_type_dynamic_detail;public String show_channel;public String title;public GoodsEntity goods;public static class GoodsEntity {public int collect_count;public boolean reservable;public int restriction;public int restrict_purchase_num;public boolean is_coupon_allowed;public int allocated_stock;public int is_gift;}}public static class DefaultGoodsListEntity {public String id;public String goods_name;public double shop_price;public double market_price;public String goods_img;public boolean reservable;public String efficacy;public int stock_number;public int restrict_purchase_num;}}}逻辑代码就这么多,下面是布局代码
activity_recy
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="bwie.com.mvp.RecyActivity"><com.jcodecraeer.xrecyclerview.XRecyclerViewandroid:id="@+id/xrv"android:layout_width="match_parent"android:layout_height="match_parent"></com.jcodecraeer.xrecyclerview.XRecyclerView></RelativeLayout>
recy_item
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="50dp"android:orientation="horizontal"><ImageViewandroid:id="@+id/iv_item"android:layout_width="50dp"android:layout_height="match_parent" /><TextViewandroid:id="@+id/tv_item"android:layout_width="match_parent"android:layout_height="match_parent"android:text="我是文本"android:textSize="20sp"/></LinearLayout>一个用MVP框架做的网络请求就出来了
相关文章推荐
- MVP架构分包+OkHttp网络请求+RecyclerView展示数据
- MVP+Retrofit+RxJava请求网络数据实现RecyclerView多条目展示
- Android---------通过OkHttp网络请求利用RecyclerView展示数据
- Retrofit2 + RxJava + Okhttp + RecyclerView用MVP架构展示数据
- Android使用OKHTTP网络框架请求数据,RecyclerView结合Glide展示图片,瀑布流布局样式
- MVP模式的OKhttp请求网络数据,xrecyclerview上拉刷新,下拉加载
- MVP框架+RXJava+reftorfit请求网络数据+XRecycleView多条目展示(banner轮播+条目展示、刷新加载)、点击事件+fresco图片加载
- 实战MVP请求数据OKHttp封装RecyclerView上拉刷新下拉加载
- MVP注册登录+OkHttp网络请求+展示数据
- Retrofit网络请求+Recyclerview展示数据+Fresco显示图片
- MVP+Rxjava+Okhttp+Retrofit+XRecyclerview请求数据
- OkHttp+RecyclerView,利用OkHttp请求数据,并RecyclerView展示
- OkHttp3请求数据,用Recyclerview展示数据
- OkHttp的网络请求数据和RecyclerView的多条目加载,添加分割线
- MVP+retrofit和Rxjava请求数据+recyclerview展示
- 使用MVP注册登录模块+封装的OKhttp,拦截器+QQ第三方登录+RecyclerView+SpringView上拉加载下拉刷新网络数据
- RecyclerView和okhttp结合 实现一个网络请求数据
- RecyclerView+OKhttp三大布局与网络请求数据
- MVP实现用Retrofit请求网络数据Fresco加载图片,Recyclerview CheckBox显示并实现全选删除
- 调用OKhttp封装类请求网络数据适配到Recyclerview上拉下拉刷新