小小菜鸟----OKHttp+Xrecyclerview+MVP

首先是依赖:

 //OKHttp
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
//日志拦截器
implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0'
//gson解析
implementation 'com.google.code.gson:gson:2.8.5'
//Glide图片加载
implementation 'com.github.bumptech.glide:glide:4.8.0'
//Xrecyclerview
implementation 'com.jcodecraeer:xrecyclerview:1.5.9'

当导入依赖报错时,添加如下代码:

	 configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == 'com.android.support') {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion '28.0.0'//根据你的底下appcompat-v7版本
            }
        }
    }
}

如下图:
在这里插入图片描述

activity_main.xml(两个按钮和一个XRecyclerView):

<?xml version="1.0" encoding="utf-8"?>

<TextView
    android:id="@+id/shou"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="首页"
    android:textSize="25sp"
    />
<TextView
    android:id="@+id/Switch"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="切换"
    android:layout_alignParentRight="true"
    android:textSize="25sp"
    />
<com.jcodecraeer.xrecyclerview.XRecyclerView
    android:id="@+id/XRecy"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@id/shou"
    android:layout_marginTop="15dp"
    ></com.jcodecraeer.xrecyclerview.XRecyclerView>

MainActivity:

package com.example.week3_04;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.OrientationHelper;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.example.week3_04.Until.NewsBean;
import com.example.week3_04.ipresenter.IPresenterImp;
import com.example.week3_04.ivem.IView;
import com.jcodecraeer.xrecyclerview.XRecyclerView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener,IView {

/**
 * 首页
 */
private TextView mShou;
/**
 * 切换
 */
private TextView mSwitch;
private XRecyclerView mXRecy;
private XRecyAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //获取资源ID
    initView();
    //设置XRecyclerView的刷新加载
    initXRecy();
}
    int mPage;
private void initXRecy() {
    mPage=1;
    //设置可刷新
    mXRecy.setPullRefreshEnabled(true);
    //设置可加载
    mXRecy.setLoadingMoreEnabled(true);
    //设置起始展示为列表格式
    LinearLayoutManager manager = new LinearLayoutManager(this);
    manager.setOrientation(OrientationHelper.VERTICAL);
    mXRecy.setLayoutManager(manager);
    mXRecy.setLoadingListener(new XRecyclerView.LoadingListener() {
        @Override
        public void onRefresh() {
            mPage=1;
            //数据加载
            initData();
        }

        @Override
        public void onLoadMore() {
            initData();
        }
    });
    initData();
}
IPresenterImp mIPresenterImp;
private void initData() {
    //进行MVP--->将数据放入到P曾
    String path="http://www.zhaoapi.cn/product/getCatagory";
    mIPresenterImp.startRequest(path,NewsBean.class);
}
//获取资源ID
private void initView() {
    mShou = (TextView) findViewById(R.id.shou);
    mSwitch = (TextView) findViewById(R.id.Switch);
    mSwitch.setOnClickListener(this);
    mXRecy = (XRecyclerView) findViewById(R.id.XRecy);
    mAdapter=new XRecyAdapter(this);
    mXRecy.setAdapter(mAdapter);
    mIPresenterImp=new IPresenterImp(this);
}
//设置初始布尔,---判断"切换"时展示不同格式
    Boolean boo=true;
@Override
public void onClick(View v) {
    switch (v.getId()) {
        default:
            break;
            //切换按钮点击
        case R.id.Switch:
            initSwitch();
            break;
    }
}

private void initSwitch() {
    if (boo){
        //如果点击"切换"按钮,boo=true,数据展示位网格形式
        GridLayoutManager manager = new GridLayoutManager(this, 2);
        manager.setOrientation(OrientationHelper.VERTICAL);
        mXRecy.setLayoutManager(manager);
    }else {

        //线性
        LinearLayoutManager manager = new LinearLayoutManager(this);
        manager.setOrientation(OrientationHelper.VERTICAL);
        mXRecy.setLayoutManager(manager);
    }
    //此时boo值发生变化
    boo=!boo;
}

/**
 * 经过MVP得到数据
 * @param o
 */
@Override
public void setData(Object o) {
        if (o instanceof NewsBean){
            NewsBean newsBean=(NewsBean)o;

                if (mPage==1){
                    //刷新数据
                    mAdapter.setMjihe(newsBean.getData());
                }else {
                    //加载数据
                    mAdapter.addMjihe(newsBean.getData());
                }
                mPage++;
                //停止刷新、加载
                mXRecy.loadMoreComplete();
                mXRecy.refreshComplete();
        }else {
            Toast.makeText(this,"错误啦",Toast.LENGTH_LONG).show();
        }
}

}

activity_adapter.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="wrap_content"
android:orientation="vertical"
>
<ImageView
    android:id="@+id/XRecy_Image"
    android:layout_width="152dp"
    android:layout_height="152dp" />
<TextView
    android:id="@+id/XRecy_Title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
<TextView
    android:id="@+id/XRecy_Price"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />
</LinearLayout>

Adapter:

package com.example.week3_04;

import android.content.Context;
import android.support.annotation.NonNull;
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 com.example.week3_04.Until.NewsBean;
import com.jcodecraeer.xrecyclerview.XRecyclerView;

import java.util.ArrayList;
import java.util.List;

public class XRecyAdapter extends XRecyclerView.Adapter<XRecyclerView.ViewHolder> {
        private Context mContext;
        private List<NewsBean.DataBean> mjihe;

public XRecyAdapter(Context context) {
    mContext = context;
    mjihe=new ArrayList <>();
}

/**
 * 刷新
 * @param mjihe
 */
public void setMjihe(List <NewsBean.DataBean> mjihe) {
    this.mjihe = mjihe;
    notifyDataSetChanged();
}

/**
 * 加载
 * @param jihe
 */
public void addMjihe(List <NewsBean.DataBean> jihe){
    mjihe.addAll(jihe);
    notifyDataSetChanged();
}

/**
 * 数据展示视图
 * @param viewGroup
 * @param i
 * @return
 */
@NonNull
@Override
public XRecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
            View view=LayoutInflater.from(mContext).inflate(R.layout.activity_adapter,viewGroup,false);
    return new ViewHolder(view);
}

/**
 * 获取数据以及条目、数据的其他操作(通过接口 删除、跳转...)
 * @param viewHolder
 * @param i
 */
@Override
public void onBindViewHolder(@NonNull XRecyclerView.ViewHolder viewHolder, int i) {
            ViewHolder holder= (ViewHolder) viewHolder;
    Glide.with(mContext).load(mjihe.get(i).getIcon()).into(holder.mImageView);
    holder.mTextPrice.setText(mjihe.get(i).getName());
    holder.mTextTitle.setText(mjihe.get(i).getCreatetime());
}

@Override
public int getItemCount() {
    return mjihe.size();
}
class ViewHolder extends XRecyclerView.ViewHolder{
            ImageView mImageView;
            TextView mTextTitle;
            TextView mTextPrice;
    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        //初始化:
        mImageView=itemView.findViewById(R.id.XRecy_Image);
        mTextTitle=itemView.findViewById(R.id.XRecy_Title);
        mTextPrice=itemView.findViewById(R.id.XRecy_Price);

    }
}

}

OKhttp:

package com.example.week3_04.Until;

import android.os.Handler;
import android.os.Looper;
import android.util.Log;

import com.google.gson.Gson;

import java.io.IOException;
import java.util.concurrent.TimeUnit;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;

public class OKHttpUntil {
/**
 * 1.单例
 */
private static OKHttpUntil instance;
private final OkHttpClient mClient;
private HttpLoggingInterceptor mInterceptor;

public static OKHttpUntil getInstance(){
    if (instance==null){
        synchronized (OKHttpUntil.class){
            if (null==instance){
                instance=new OKHttpUntil();
            }
        }
    }
    return instance;
}

private OKHttpUntil(){
    //日志拦截器
    mInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
        @Override
        public void log(String message) {
            Log.i("TAG","message="+message);
        }
    });
    mInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    /**
     * 2.客户端
     */

    mClient = new OkHttpClient.Builder()
            .connectTimeout(10,TimeUnit.SECONDS)
            .writeTimeout(10,TimeUnit.SECONDS)
            .readTimeout(10,TimeUnit.SECONDS)
            .addInterceptor(mInterceptor)
            .build();

}

/**
 * 3.接口
 */
public interface CallBack{
    void fail(Exception e);
    void success(Object o);
}
/**
 * 4.get异步
 */
Handler mHandler=new Handler(Looper.getMainLooper());
public void getEnquene(String path, final Class clazz, final CallBack callBack){
    Request request = new Request.Builder().get().url(path).build();
    Call call = mClient.newCall(request);
    call.enqueue(new Callback() {
        @Override
        public void onFailure(Call call, final IOException e) {
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                callBack.fail(e);
                }
            });
        }

        @Override
        public void onResponse(Call call, Response response) throws IOException {
                            try {
                                String string = response.body().string();
                                Gson gson = new Gson();
                                final Object o = gson.fromJson(string, clazz);
                                mHandler.post(new Runnable() {
                                    @Override
                                    public void run() {
                                        callBack.success(o);
                                    }
                                });
                            }catch (Exception e){
                                e.printStackTrace();
                            }
        }
    });
}

}

MVP略。。详情见如下github:

详情

猜你喜欢

转载自blog.csdn.net/weixin_43258668/article/details/85040073