使用OkHttp和Mvp和RecyclerView进行页面展示

OkHttp工具类

package com.bawei.week01_3;

import android.os.Handler;
import android.os.Message;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

/**
 * @Author:
 * @E-mail:
 * @Date:
 * @Description:描述信息
 */
public class OkHttpUtils {
    private int HTTP_SUCCESS=10;
    private int HTTP_FAIL=9;
    private HttpListener httpListener;

    //get方法    (OkHttpUtils)---->在model层中能获取result方法
    public OkHttpUtils get(String url){
        getHttp(url,0,null);
        return this;
    }
    public OkHttpUtils post(String url,FormBody.Builder builder1){
        getHttp(url,1,builder1);
        return this;
    }

    private void getHttp(String url, int i,FormBody.Builder builder1) {
    //添加拦截器
        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new LanJie()).build();
        Request.Builder builder = new Request.Builder();
        if (i==0){
            //get请求
            builder.url(url);
            builder.get();
        }else{
            //post请求
            builder.url(url);
            //这里可以通过参数的形式传递过来
            //FormBody.Builder builder1 = new FormBody.Builder();
            RequestBody requestBody= builder1.build();
            builder.post(requestBody);
        }
        final Request request = builder.build();
        //异步请求---》execute()同步
        client.newCall(request).enqueue(new Callback() {
            Message message=Message.obtain();
            @Override
            public void onFailure(Call call, IOException e) {
                //请求失败
                message.what=HTTP_FAIL;
                handler.sendMessage(message);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //请求成功--》子线程   所以要发送到主线程中
               // response.body().string();   获取数据
                message.obj=response.body().string();
                message.what=HTTP_SUCCESS;
                handler.sendMessage(message);

            }
        });
        
    }
    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //接收handler
            if (msg.what==HTTP_SUCCESS){
                //获取数据
                String data= (String) msg.obj;
                //要传到Model层中    通过一个接口回调的形式
                httpListener.success(data);
            }else{
                httpListener.fail();
            }
        }
    };

    //写一个方法  将接口将接口以参数的形式传递
    public void result(HttpListener httpListener){
        this.httpListener=httpListener;
    }

    //定义一个接口
    public interface HttpListener{
        void success(String data);
        void fail();
    }
    //拦截的类
    private class LanJie implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request();
        String url = request.url().host();
        HttpUrl url1 = request.url();
        boolean https = request.isHttps();
        String method = request.method();
        Log.d("aaa",url+"======="+method+"======="+url1+"====="+https);

        return chain.proceed(request);
    }
}
}

MainView层

package com.bawei.week01_3.mvp.view;

/**
 * @Author:
 * @E-mail:
 * @Date:
 * @Description:描述信息
 */
public interface MainView {
    //业务需求
    void success(String data);
    void fail();
}

MainModel接口层

package com.bawei.week01_3.mvp.model;

/**
 * @Author:
 * @E-mail:
 * @Date:
 * @Description:描述信息
 */
public interface MainModel {

    public interface CallBack{
        void success(String data);
        void fail();
    }
    //获取数据
    void getData(CallBack callBack);
}

MainModelIml实现类

package com.bawei.week01_3.mvp.model;

import com.bawei.week01_3.OkHttpUtils;

/**
 * @Author:
 * @E-mail:
 * @Date:
 * @Description:描述信息
 */
public class MainModelIml implements MainModel {
    private String url="https://www.apiopen.top/novelApi";
    @Override
    public void getData(final CallBack callBack) {
        //通过okhttp来进行获取数据
        new OkHttpUtils().get(url).result(new OkHttpUtils.HttpListener() {
            @Override
            public void success(String data) {
                //获取到数据
                callBack.success(data);
            }

            @Override
            public void fail() {
                callBack.fail();
            }
        });
    }
}

MainPresenter接口层

package com.bawei.week01_3.mvp.presenter;

/**
 * @Author:
 * @E-mail:
 * @Date:
 * @Description:描述信息
 */
public interface MainPresenter {
    void doData();
}

MainPresenter实现类

package com.bawei.week01_3.mvp.presenter;

import com.bawei.week01_3.mvp.model.MainModel;
import com.bawei.week01_3.mvp.view.MainView;

/**
 * @Author:
 * @E-mail:
 * @Date:
 * @Description:描述信息
 */
public class MainPresenterIml implements MainPresenter {
    //通过构造拿到model层和view层
    private MainModel mainModel;
    private MainView mainView;

    public  MainPresenterIml(MainModel mainModel, MainView mainView){
        this.mainModel=mainModel;
        this.mainView=mainView;
    }
    @Override
    public void doData() {
        mainModel.getData(new MainModel.CallBack() {
            @Override
            public void success(String data) {
                mainView.success(data);
            }

            @Override
            public void fail() {
                mainView.fail();
            }
        });
    }

    public void destroy() {
        if (mainModel!=null){
            mainModel=null;
        }
        if (mainView!=null){
            mainView=null;
        }
        System.gc();
    }
}

MainActivity

package com.bawei.week01_3;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.StaggeredGridLayoutManager;

import com.bawei.week01_3.adapter.MoreAdapter;
import com.bawei.week01_3.adapter.MyAdapter;
import com.bawei.week01_3.bean.Data;
import com.bawei.week01_3.bean.NewsData;
import com.bawei.week01_3.mvp.model.MainModel;
import com.bawei.week01_3.mvp.model.MainModelIml;
import com.bawei.week01_3.mvp.presenter.MainPresenterIml;
import com.bawei.week01_3.mvp.view.MainView;
import com.google.gson.Gson;
import com.jcodecraeer.xrecyclerview.XRecyclerView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements MainView {

    private XRecyclerView x_recycler;
    private MainPresenterIml mainPresenterIml;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找控件
        x_recycler =(XRecyclerView) findViewById(R.id.x_recycler);
        //设置XRecyclerView的布局管理器
        //LinearLayoutManager-->线性
        //GridLayoutManager--->网格
        //StaggeredGridLayoutManager--->瀑布流
        LinearLayoutManager linearLayoutManager=new LinearLayoutManager(MainActivity.this);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        x_recycler.setLayoutManager(linearLayoutManager);
        //实例化Presenter层
        mainPresenterIml = new MainPresenterIml(new MainModelIml(), this);
        //调用posenter层的fangf
        mainPresenterIml.doData();
        x_recycler.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                mainPresenterIml.doData();
                x_recycler.refreshComplete();
                x_recycler.loadMoreComplete();
            }

            @Override
            public void onLoadMore() {
                mainPresenterIml.doData();
                x_recycler.refreshComplete();
                x_recycler.loadMoreComplete();
            }
        });
    }

    @Override
    public void success(String data) {
        //获取到数据进行解析
        NewsData newsData = new Gson().fromJson(data, NewsData.class);
        ArrayList<Data> list = newsData.getData();
        //创建适配器
        //MyAdapter adapter=new MyAdapter(MainActivity.this,list);
        MoreAdapter adapter=new MoreAdapter(MainActivity.this,list);
        x_recycler.setAdapter(adapter);
    }

    @Override
    public void fail() {

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mainPresenterIml.destroy();
    }
}

MoreAdapter(多条目)

package com.bawei.week01_3.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bawei.week01_3.R;
import com.bawei.week01_3.bean.Data;
import com.bumptech.glide.Glide;

import java.util.ArrayList;

/**
 * @Author:
 * @E-mail:
 * @Date:
 * @Description:描述信息
 */
public class MoreAdapter extends RecyclerView.Adapter {
    private Context context;
    private ArrayList<Data> list=new ArrayList<>();

    public MoreAdapter(Context context, ArrayList<Data> list) {
        this.context = context;
        this.list = list;
    }
    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        RecyclerView.ViewHolder viewHolder=null;
        switch (i){
            case 0:
                View view = View.inflate(context, R.layout.item, null);
                viewHolder = new ViewHolder01(view);
                break;
            case 1:
                View view1 = View.inflate(context, R.layout.item2, null);
                viewHolder = new ViewHolder01(view1);
                break;
            case 2:
                View view2 = View.inflate(context, R.layout.item3, null);
                viewHolder = new ViewHolder01(view2);
                break;
        }
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {

        if (viewHolder instanceof ViewHolder01){
            ((ViewHolder01) viewHolder).bookname.setText(list.get(i).getBookname());
            ((ViewHolder01) viewHolder).book_info.setText(list.get(i).getBook_info());
            Glide.with(context).load(list.get(i).getBook_cover()).into(((ViewHolder01) viewHolder).book_cover);
        }else if (viewHolder instanceof ViewHolder02){
            ((ViewHolder02) viewHolder).bookname.setText(list.get(i).getBookname());
            ((ViewHolder02) viewHolder).book_info.setText(list.get(i).getBook_info());
            Glide.with(context).load(list.get(i).getBook_cover()).into(((ViewHolder02) viewHolder).book_cover);
        }else if(viewHolder instanceof ViewHolder03){
            ((ViewHolder03) viewHolder).bookname.setText(list.get(i).getBookname());
            ((ViewHolder03) viewHolder).book_info.setText(list.get(i).getBook_info());
            Glide.with(context).load(list.get(i).getBook_cover()).into(((ViewHolder03) viewHolder).book_cover);
        }

    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    @Override
    public int getItemViewType(int position) {
        return position%3;
    }
    class ViewHolder01 extends RecyclerView.ViewHolder{
        private ImageView book_cover;
        private TextView bookname,book_info;
        public ViewHolder01(@NonNull View itemView) {
            super(itemView);
            book_cover =(ImageView) itemView.findViewById(R.id.book_cover);
            bookname =(TextView)itemView.findViewById(R.id.bookname);
            book_info =(TextView)itemView.findViewById(R.id.book_info);
        }
    }
    class ViewHolder02 extends RecyclerView.ViewHolder{
        private ImageView book_cover;
        private TextView bookname,book_info;
        public ViewHolder02(@NonNull View itemView) {
            super(itemView);
            book_cover =(ImageView) itemView.findViewById(R.id.book_cover);
            bookname =(TextView)itemView.findViewById(R.id.bookname);
            book_info =(TextView)itemView.findViewById(R.id.book_info);
        }
    }
    class ViewHolder03 extends RecyclerView.ViewHolder{
        private ImageView book_cover;
        private TextView bookname,book_info;
        public ViewHolder03(@NonNull View itemView) {
            super(itemView);
            book_cover =(ImageView) itemView.findViewById(R.id.book_cover);
            bookname =(TextView)itemView.findViewById(R.id.bookname);
            book_info =(TextView)itemView.findViewById(R.id.book_info);
        }
    }
}

MyAdapter(单条目)

package com.bawei.week01_3.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bawei.week01_3.R;
import com.bawei.week01_3.bean.Data;
import com.bumptech.glide.Glide;

import java.util.ArrayList;

/**
 * @Author:
 * @E-mail:
 * @Date:
 * @Description:描述信息
 */
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private Context context;
    private ArrayList<Data> list=new ArrayList<>();

    public MyAdapter(Context context, ArrayList<Data> list) {
        this.context = context;
        this.list = list;
    }

    @NonNull
    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = View.inflate(context, R.layout.item, null);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyAdapter.ViewHolder viewHolder, int i) {
        viewHolder.bookname.setText(list.get(i).getBookname());
        viewHolder.book_info.setText(list.get(i).getBook_info());
        Glide.with(context).load(list.get(i).getBook_cover()).into(viewHolder.book_cover);
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        private ImageView book_cover;
        private TextView bookname,book_info;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            book_cover =(ImageView) itemView.findViewById(R.id.book_cover);
            bookname =(TextView)itemView.findViewById(R.id.bookname);
            book_info =(TextView)itemView.findViewById(R.id.book_info);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值