MVP框架OKHttp请求RecyclerView展示

需要的依赖

 implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'
    implementation 'com.google.code.gson:gson:2.2.4'
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:recyclerview-v7:28.0.0'

创建接口

public interface DataCallBack {
    public void secc(String str);
}

Model层

          model接口

import kk.com.dome2.model.intfacees.DataCallBack;

public interface ModelImpe {
    public void requstData(DataCallBack dataCallBack);
}

    

public class IModel implements ModelImpe {

    DataCallBack dataCallBack;
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            String json = (String) msg.obj;
            //把数据返回到p层
            dataCallBack.secc(json);
        }
    };
    @Override
    public void requstData(DataCallBack dataCallBack) {
        this.dataCallBack = dataCallBack;
        OKHttp.getInstance().doget(handler);
    }
}

Presenter层

       接口

public interface PresenterImpe {
   public void toModel();
}

         

public class Presenter implements PresenterImpe{

    //model 接口对象
    ModelImpe modelImpe;
    //view的接口对象
    IView iView;

    public Presenter(IView iView) {
        this.iView = iView;
        modelImpe=new IModel();
    }

    @Override
    public void toModel() {
        modelImpe.requstData(new DataCallBack() {
            @Override
            public void secc(String str) {
                //得到执行
                iView.showData(str);
            }
        });
    }
}

OKHttp3

public class OKHttp {
    static OKHttp okHttp=null;
    private final OkHttpClient okHttpClient;

    public OKHttp() {
        HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        okHttpClient = new  OkHttpClient.Builder()
                .connectTimeout(5,TimeUnit.SECONDS)
                .readTimeout(5,TimeUnit.SECONDS)
                .writeTimeout(5,TimeUnit.SECONDS)
                .addInterceptor(loggingInterceptor)
                .build();
    }

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

    public void doget(final Handler mHandler) {


        Request request = new Request.Builder()
                .url(Url.url)
                .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 {
                //成功
                Message message = new Message();
                message.obj = response.body().string();
                mHandler.sendMessage(message);
            }
        });
    }
    public void doPost() {
        String url = "";
        OkHttpClient okHttpClient = new OkHttpClient();
        RequestBody body = new FormBody.Builder()
                .add("phone", "122222222")
                .add("pwd", "12345")
                .build();

        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .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 {

            }
        });
    }
}

Bean类

package kk.com.dome2.utills;

import java.util.List;

public class Bean {


    /**
     * code : 200
     * data : [{"content":"习近平举行仪式欢迎加蓬总统访华","id":10000,"image_url":"http://pic32.nipic.com/20130817/9745430_101836881000_2.jpg","title":"今日头条","type":1},{"content":"习近平举行仪式欢迎加蓬总统访华","id":10001,"image_url":"http://pic15.nipic.com/20110630/6322714_105943746342_2.jpg","title":"往期故事","type":2},{"content":"这个市的书记市长双双被约谈 引发震动","id":10002,"image_url":"http://pic48.nipic.com/file/20140916/2531170_195153248000_2.jpg","title":"讨论天下","type":3},{"content":"\u201c乔丹\u201d商标是否侵权 4年官司迎最高法判决 调查","id":10003,"image_url":"http://img.taopic.com/uploads/allimg/140626/240469-1406261S24553.jpg","title":"我的珍爱","type":4},{"content":"黑龙江稻农收入暴涨组团进城买房 有人买十多套","id":10004,"image_url":"http://pic77.nipic.com/file/20150911/21721561_155058651000_2.jpg","title":"我的未来","type":5},{"content":"印尼6.4级地震致97死 专家称当地防震意识差","id":10005,"image_url":"http://img4.duitang.com/uploads/item/201603/18/20160318103156_cziuY.jpeg","title":"东芝","type":6}]
     * head_url : http://h.hiphotos.baidu.com/zhidao/pic/item/9d82d158ccbf6c81e718270eb93eb13533fa402c.jpg
     * name : 思凡
     */

    private int code;
    private String head_url;
    private String name;
    private List<DataBean> data;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getHead_url() {
        return head_url;
    }

    public void setHead_url(String head_url) {
        this.head_url = head_url;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {
        /**
         * content : 习近平举行仪式欢迎加蓬总统访华
         * id : 10000
         * image_url : http://pic32.nipic.com/20130817/9745430_101836881000_2.jpg
         * title : 今日头条
         * type : 1
         */

        private String content;
        private int id;
        private String image_url;
        private String title;
        private int type;

        public String getContent() {
            return content;
        }

        public void setContent(String content) {
            this.content = content;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getImage_url() {
            return image_url;
        }

        public void setImage_url(String image_url) {
            this.image_url = image_url;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public int getType() {
            return type;
        }

        public void setType(int type) {
            this.type = type;
        }
    }
}

VIew层

public interface IView {

    public void  showData(String str);
}

MainActivity类

public class MainActivity extends AppCompatActivity implements IView,MyAdapter.onclickItem{


    RecyclerView recyclerView;
    PresenterImpe presenterImpe;
    private List<Bean.DataBean> data;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //接 口 new 类
        presenterImpe=new Presenter(this);
        presenterImpe.toModel();
        initData();
    }
    private void initData() {
        recyclerView=findViewById(R.id.recyclerView);
    }
    @Override
    public void showData(String str) {
        //在此方法中跟新显示
        Log.e("接口",str);
        Gson gson=new Gson();
        Bean bean = gson.fromJson(str, Bean.class);
        data = bean.getData();
        MyAdapter myAdapter=new MyAdapter(data,MainActivity.this);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(myAdapter);
    }

适配器

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.VH> {

    List<Bean.DataBean> list;
    Context context;



    public MyAdapter(List<Bean.DataBean> data, Context context) {
        this.list = data;
        this.context = context;
    }

    @Override
    public VH onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
        return  new VH(inflate);
    }

    @Override
    public void onBindViewHolder(VH holder, final int position) {
        holder.textView.setText(list.get(position).getTitle());
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                oncickItem.onclick(v,list.get(position).getId());
            }
        });
    }
    @Override
    public int getItemCount() {
        return list.size();
    }

    public class VH extends RecyclerView.ViewHolder{
        TextView textView;
        public VH(View itemView) {
            super(itemView);
            textView=itemView.findViewById(R.id.text1);
        }
    }

    public interface onclickItem {
        void onclick(View view,int id);
    }
    public  onclickItem oncickItem;

    public void setOncickItem(onclickItem oncickItem) {
        this.oncickItem = oncickItem;
    }
}

猜你喜欢

转载自blog.csdn.net/wangshuo_/article/details/87871874