Mvp设计模式实现okHttpClient请求展示在RecycleView

本文介绍了一个基于MVP模式的应用案例,包括Model层处理数据请求与解析、View层展示UI及交互、Presenter层协调Model与View的工作流程。通过具体代码实现展示了如何使用MVP模式进行Android应用开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Molde层

package com.lixinyang.mvp_test.Model;

/**
 * author:Created by WangZhiQiang on 2018/1/4.
 */

public interface Imodel {
    void setimodel(Bean bean,getHttpclient httpclient);
}
================================================================

package com.lixinyang.mvp_test.Model;

import java.util.List;

/**
 * author:Created by WangZhiQiang on 2018/1/4.
 */

public interface getHttpclient {
    void succrss(List<image.ResultBean.DataBean> data);
    void error(String error);
}
=================================================================

package com.lixinyang.mvp_test.Model;

import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;

import com.google.gson.Gson;

import java.io.IOException;
import java.util.List;

import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

/**
 * author:Created by WangZhiQiang on 2018/1/4.
 */

public class implmodel implements Imodel {
    @SuppressLint("HandlerLeak")
    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            OkHttpClient okHttpClient = new OkHttpClient();
            Request build = new Request.Builder().url(bean.getUri()).build();
            Call call = okHttpClient.newCall(build);
            call.enqueue(new okhttp3.Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    httpclient.error("对不起请求失败"+call.toString());
                }

                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    String string = response.body().string();
                    Gson gson = new Gson();
                    image image = gson.fromJson(string, image.class);
                    List<image.ResultBean.DataBean> data = image.getResult().getData();
                    httpclient.succrss(data);
                }
            });
        }
    };
    private Bean bean;
    private getHttpclient httpclient;

    @Override
    public void setimodel(Bean bean, getHttpclient httpclient) {
        this.bean = bean;
        this.httpclient = httpclient;
        new Thread(){
            @Override
            public void run() {
                SystemClock.sleep(1000);
                handler.sendEmptyMessage(0);
            }
        }.start();
    }
}
======================================================================================

package com.lixinyang.mvp_test.Model;

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.TextView;

import com.lixinyang.mvp_test.R;

import java.util.List;

/**
 * author:Created by WangZhiQiang on 2018/1/4.
 */

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private List<image.ResultBean.DataBean> list;
    private Context context;

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

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.activity_item, null);
        MyViewHolder holder = new MyViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        TextView textView = holder.getTextView();
        textView.setText(list.get(position).getTitle());
    }

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

    class MyViewHolder extends RecyclerView.ViewHolder{

        private TextView textView;

        public MyViewHolder(View itemView) {
            super(itemView);
            this.textView = itemView.findViewById(R.id.tv);
        }

        public TextView getTextView() {
            return textView;
        }

        public void setTextView(TextView textView) {
            this.textView = textView;
        }
    }
}
==============================================================================

View层

package com.lixinyang.mvp_test.View;

import android.content.Context;
import android.support.v7.widget.RecyclerView;

import com.lixinyang.mvp_test.Model.image;

import java.util.List;

/**
 * author:Created by WangZhiQiang on 2018/1/4.
 */

public interface Iview {
    void showprogressbar();
    void hideprogressbar();
    String geturi();
    RecyclerView getrv();
    void setAdapter(Context context, List<image.ResultBean.DataBean> list);
    void no(String no);
}
===========================================================================================

package com.lixinyang.mvp_test.View;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.lixinyang.mvp_test.Model.MyAdapter;
import com.lixinyang.mvp_test.Model.image;
import com.lixinyang.mvp_test.Model.implmodel;
import com.lixinyang.mvp_test.Presenter.implpresenter;
import com.lixinyang.mvp_test.R;

import java.util.List;

public class MainActivity extends AppCompatActivity implements Iview {

    private Button btn;
    private RecyclerView rv;
    String key = "2f41498b35e69877fc56dc96776e5d1f";
    String uri = "http://v.juhe.cn/toutiao/index?type=top&key="+key;
    private ProgressBar pb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        btn = (Button) findViewById(R.id.btn);
        rv = (RecyclerView) findViewById(R.id.rv);
        pb = (ProgressBar) findViewById(R.id.pb);
        rv.setLayoutManager(new LinearLayoutManager(MainActivity.this));
        rv.setItemAnimator(new DefaultItemAnimator());
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                implpresenter implpresenter = new implpresenter();
                implpresenter.viewandmodle(MainActivity.this,new implmodel(),MainActivity.this);
            }
        });
    }

    @Override
    public void showprogressbar() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                pb.setVisibility(View.VISIBLE);
            }
        });
    }

    @Override
    public void hideprogressbar() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                pb.setVisibility(View.INVISIBLE);
            }
        });
    }

    @Override
    public String geturi() {
        return uri;
    }

    @Override
    public RecyclerView getrv() {
        return rv;
    }

    @Override
    public void setAdapter(Context context, final List<image.ResultBean.DataBean> list) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                MyAdapter adapter = new MyAdapter(MainActivity.this,list);
                rv.setAdapter(adapter);
            }
        });
    }

    @Override
    public void no(final String no) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this,no,Toast.LENGTH_SHORT).show();
            }
        });
    }
}
================================================================================================

presenter层

package com.lixinyang.mvp_test.Presenter;

import android.content.Context;

import com.lixinyang.mvp_test.Model.Imodel;
import com.lixinyang.mvp_test.View.Iview;

/**
 * author:Created by WangZhiQiang on 2018/1/4.
 */

public interface Ipresenter {
    void viewandmodle(Context context,Imodel imodel, Iview iview);
}
=================================================================================

package com.lixinyang.mvp_test.Presenter;

import android.content.Context;

import com.lixinyang.mvp_test.Model.Bean;
import com.lixinyang.mvp_test.Model.Imodel;
import com.lixinyang.mvp_test.Model.getHttpclient;
import com.lixinyang.mvp_test.Model.image;
import com.lixinyang.mvp_test.View.Iview;

import java.util.List;

/**
 * author:Created by WangZhiQiang on 2018/1/4.
 */

public class implpresenter implements Ipresenter {
    @Override
    public void viewandmodle(final Context context , Imodel imodel, final Iview iview) {
        iview.showprogressbar();
        imodel.setimodel(new Bean(iview.geturi(), iview.getrv()), new getHttpclient() {

            @Override
            public void succrss(List<image.ResultBean.DataBean> data) {
                iview.hideprogressbar();
                iview.setAdapter(context,data);
            }

            @Override
            public void error(String error) {
                iview.hideprogressbar();
            }
        });
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值