xutils 网络请求框架结合BaseRecyclerViewAdapterHelper万能adapter

来源:互联网 发布:国际象棋对弈软件下载 编辑:程序博客网 时间:2024/06/14 15:53

此文章为了运用xutils网络请求框架加载网络数据 –xUtils攻略和玩法,并且通过Gson解析加载数据实现上啦加载和下拉刷新BaseRecyclerViewAdapterHelper,它只能和RecyclerView相结合使用。

效果图如下:

这里写图片描述
1.项目开始要找到xUtils 依赖

compile 'org.xutils:xutils:3.5.0'

2.BaseRecyclerViewAdapterHelper 依赖

compile 'com.android.support.constraint:constraint-layout:1.0.2'compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.9'compile 'com.android.support:recyclerview-v7:25.2.0'

3.gson依赖

compile 'com.google.code.gson:gson:2.8.0'

4.加上相应权限

<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

那我们就贴入相应代码我项目中的xutils 是jar包在libs目录下 可能和上面xutils 有冲突
布局文件 activity_db2.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <android.support.v4.widget.SwipeRefreshLayout        android:id="@+id/swipeLayout"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical">        <android.support.v7.widget.RecyclerView            android:id="@+id/list_view"            android:layout_width="match_parent"            android:layout_height="fill_parent"            android:fadingEdge="none"            android:overScrollMode="never"            android:scrollbars="none"></android.support.v7.widget.RecyclerView>    </android.support.v4.widget.SwipeRefreshLayout></LinearLayout>

注意:android.support.v4.widget.SwipeRefreshLayout 是android 5.0下啦刷新的新特性。在此我们就不多讲

activity代码如下:

public class DBActivity2 extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener, BaseQuickAdapter.RequestLoadMoreListener{    private SwipeRefreshLayout swipeLayout;    private RecyclerView recyclerView;    private BaseRecyclerViewAdapter<DataBean> mAdapter;    private List<DataBean> list = new ArrayList<>();    private List<DataBean> mlist2 = new ArrayList<>();    private int pageNo = 1;    private int status; // 0  正常加载更多, 1 加载完成 , 2 加载失败。    private Button btn;    private Button delete_btn;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_db2);        initView();        initData(pageNo);        initAdapter();    }    private void initView() {        delete_btn= (Button) findViewById(R.id.delete_btn);        btn = (Button) findViewById(R.id.btn);        swipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipeLayout);        recyclerView = (RecyclerView) findViewById(R.id.list_view);        swipeLayout.setOnRefreshListener(this);    }    private void initAdapter() {        mAdapter = new BaseRecyclerViewAdapter<DataBean>(R.layout.list_item, list) {            @Override            protected void convert(BaseViewHolder helper, final DataBean item) {                helper.setText(R.id.package_name, item.getTitle());                helper.getLayoutPosition();                helper.getView(R.id.item_btn).setOnClickListener(new View.OnClickListener() {                    @Override                    public void onClick(View v) {                        Toast.makeText(getApplicationContext(),"dianji",Toast.LENGTH_SHORT).show();                    }                });            }        };        mAdapter.setEnableLoadMore(true);        mAdapter.setOnLoadMoreListener(this, recyclerView);        recyclerView.setLayoutManager(new LinearLayoutManager(this));        recyclerView.setAdapter(mAdapter);    }    private void initData(final int pageNo) {        HttpUtils httpUtils = new HttpUtils();        RequestParams params = new RequestParams();        params.addBodyParameter("uid", "0");        params.addBodyParameter("type", "1");        params.addBodyParameter("page", String.valueOf(pageNo));        httpUtils.send(HttpMethod.POST, "http://api.kuyou001.com/api/gift/giftlist", params, new RequestCallBack<String>() {            @Override            public void onSuccess(ResponseInfo<String> responseInfo) {                String s = responseInfo.result;                if (pageNo == 1) {                    list.clear();                }                MyData bean = new Gson().fromJson(s, MyData.class);                list.addAll(bean.getData().getContent());                if (bean.getData().getContent().size() == 0 || bean.getData().getContent().isEmpty() || bean.getData().getContent() == null) {                    status = 1;                } else {                    status = 0;                    mAdapter.setNewData(list);                }            }            @Override            public void onFailure(HttpException e, String s) {                status = 2;            }        });    }    //上拉加载    @Override    public void onLoadMoreRequested() {        swipeLayout.setEnabled(false);        new Handler().postDelayed(new Runnable() {            @Override            public void run() {                swipeLayout.setEnabled(true);                switch (status) {                    case 0:                        pageNo++;                        initData(pageNo);                        mAdapter.setNewData(list);                        mAdapter.loadMoreComplete();                        break;                    case 1:                        pageNo++;                        initData(pageNo);                        mAdapter.setNewData(list);                        mAdapter.loadMoreEnd();                        break;                    case 2:                        mAdapter.loadMoreFail();                        break;                }            }        }, 100);    }    //下啦刷新    @Override    public void onRefresh() {        mAdapter.setEnableLoadMore(false);        new Handler().postDelayed(new Runnable() {            @Override            public void run() {                pageNo = 1;                mAdapter.setNewData(list);                swipeLayout.setRefreshing(false);                mAdapter.setEnableLoadMore(true);            }        }, 100);    }}

注意:BaseRecyclerViewAdapter这个类是对BaseQuickAdapter再次封装的类

public abstract class BaseRecyclerViewAdapter<T> extends BaseQuickAdapter<T , BaseViewHolder> {    public BaseRecyclerViewAdapter(int layoutResId, List<T> data) {        super(layoutResId, data);    }}

通过BaseRecyclerViewAdapterHelper实现是不是代码减少了许多 不用在继承baseadapter了 简单粗暴 加快效率 希望大家可以笑纳

注意:只看DBActivity2类 删除和查询按钮是为了做数据库操作的 – 可以忽略
demo下载

0 0