RecyclerView +Mvp +OkHttp

1.   在MVp包下的  Model包下  创建 MainModel 类     Model主要用于联网请求数据

2.  在MVp包下的 View包下 创建MainView 类

3.   在MVP包下的Presenter包下 创建 MainPresenter 类

4.   在在MVp包下的 View包下创建activity包,然后在包下创建 MainActivity

5.  创建包名为Base,下面一共有三个类,分别是BaseActivity,BasePresenter,IView

6. 最后最重要的   适配器

    主布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".mvp.view.activity.MainActivity">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">


        <Button
            android:id="@+id/btn_linear_main"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="线性布局" />


        <Button
            android:id="@+id/btn_grid_main"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="表格布局" />


        <Button
            android:id="@+id/btn_st_main"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="瀑布流" />
    </LinearLayout>


    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_show_main"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"></android.support.v7.widget.RecyclerView>
</LinearLayout>

子布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="60dp">
     <ImageView
         android:id="@+id/item_image"


         android:layout_width="wrap_content"
         android:layout_height="wrap_content" />
   <TextView
       android:id="@+id/item_tv"
       android:layout_marginTop="10dp"
       android:layout_width="wrap_content"
       android:text="kkk"
       android:layout_height="wrap_content" />

</LinearLayout>


OkHttp

public class OkHttpUtils {
    public static OkHttpUtils oKhttpUtils;
    private final OkHttpClient okHttpClient;
    private final Handler myhandler;


    private OkHttpUtils() {
        //日志拦截器
//        HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
//        httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);


        //主线程Handler
        myhandler = new Handler(Looper.getMainLooper());
        okHttpClient = new OkHttpClient.Builder()
                .readTimeout(5000, TimeUnit.MILLISECONDS)
                .writeTimeout(5000, TimeUnit.MILLISECONDS)
                .connectTimeout(5000, TimeUnit.MILLISECONDS)
              //  .addInterceptor(httpLoggingInterceptor)
                .build();
    }


    public static OkHttpUtils getoKhttpUtils() {
        if (oKhttpUtils == null) {
            synchronized (OkHttpUtils.class) {
                if (oKhttpUtils == null) {
                    return oKhttpUtils = new OkHttpUtils();
                }
            }
        }
        return oKhttpUtils;
    }


    //异步get
    public void doGet(String url, final IOKhttpUtilsCallback ioKhttpUtilsCallback) {
        Request request = new Request.Builder()
                .get()
                .url(url)
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                if (ioKhttpUtilsCallback != null) {
                    //切换到主线程
                    myhandler.post(new Runnable() {
                        @Override
                        public void run() {
                            ioKhttpUtilsCallback.onFailure(e.getMessage());
                        }
                    });
                }
            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response != null && response.isSuccessful()) {
                    final String json = response.body().string();
                    if (ioKhttpUtilsCallback != null) {
                        //切换到主线程
                        myhandler.post(new Runnable() {
                            @Override
                            public void run() {
                                ioKhttpUtilsCallback.onResponse(json);
                            }
                        });
                    }


                } else {
                    if (ioKhttpUtilsCallback != null) {
                        //切换到主线程
                        myhandler.post(new Runnable() {
                            @Override
                            public void run() {
                                ioKhttpUtilsCallback.onFailure("网络异常");
                            }
                        });
                    }
                }
            }
        });


    }


    //异步post
    public void doPost(String url, Map<String, String> map, final IOKhttpUtilsCallback ioKhttpUtilsCallback) {
        FormBody.Builder builder = new FormBody.Builder();
        for (Map.Entry<String, String> entry : map.entrySet()) {
            builder.add(entry.getKey(), entry.getValue());
        }
        FormBody formBody = builder.build();
        Request request = new Request.Builder()
                .post(formBody)
                .url(url)
                .build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, final IOException e) {
                if (ioKhttpUtilsCallback != null) {
                    //切换到主线程
                    myhandler.post(new Runnable() {
                        @Override
                        public void run() {
                            ioKhttpUtilsCallback.onFailure(e.getMessage());
                        }
                    });
                }
            }


            @Override
            public void onResponse(Call call, Response response) throws IOException {
                if (response != null && response.isSuccessful()) {
                    final String json = response.body().string();
                    if (ioKhttpUtilsCallback != null) {
                        //切换到主线程
                        myhandler.post(new Runnable() {
                            @Override
                            public void run() {
                                ioKhttpUtilsCallback.onResponse(json);
                            }
                        });
                    }


                } else {
                    if (ioKhttpUtilsCallback != null) {
                        //切换到主线程
                        myhandler.post(new Runnable() {
                            @Override
                            public void run() {
                                ioKhttpUtilsCallback.onFailure("网络异常");
                            }
                        });
                    }
                }
            }
        });
    }


    //接口回调
    public interface IOKhttpUtilsCallback {
        void onFailure(String error);


        void onResponse(String json);
    }
}





适配器

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
       private List<MainBean.DataBean> list;


    public MyAdapter(List<MainBean.DataBean> list) {
        this.list = list;
    }


    @Override
    public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_activity, parent, false);


        return new MyViewHolder(itemView);
    }


    @Override
    public void onBindViewHolder(MyAdapter.MyViewHolder holder, int position) {


           holder.textView.setText(list.get(position).getName());
        ImageLoader.getInstance().displayImage(list.get(position).getIcon(),holder.imageView, MyApp.getOptions());
    }


    @Override
    public int getItemCount() {
        return list==null ? 0 : list.size();
    }


    public class MyViewHolder extends RecyclerView.ViewHolder {
        private TextView textView;
        private ImageView imageView;
        public MyViewHolder(View itemView) {
            super(itemView);


               textView=itemView.findViewById(R.id.item_tv);
                imageView=itemView.findViewById(R.id.item_image);
        }
    }

}



MainModel

public class MainModel {
          public void show(final IShowModelCallback iShowModelCallBack){
              OkHttpUtils okHttpUtils = OkHttpUtils.getoKhttpUtils();
               okHttpUtils.doGet(HttpConfig.MAIN_SHUJU, new OkHttpUtils.IOKhttpUtilsCallback() {
                           @Override
                           public void onFailure(String error) {
                               if (iShowModelCallBack!=null) {
                                   iShowModelCallBack.getFaild(error);
                               }
                           }


                           @Override
                           public void onResponse(String json) {
                               Gson gson = new Gson();
                               MainBean mainBean = gson.fromJson(json, MainBean.class);
                               String code = mainBean.getCode();
                               String msg = mainBean.getMsg();
                               if("0".equals(code)){
                                   iShowModelCallBack.getSuccess(mainBean);
                               }else{
                                   iShowModelCallBack.getFaild(msg);
                               }
                           }
                       }
               );
          }


    public interface IShowModelCallback{
        void getSuccess(MainBean showBean);
        void getFaild(String error);
    }
}


MainView

public interface MainView extends IView {
    void onSuccess(MainBean loginBean);
    void onFaild(String error);

}


MainPresenter

public class MainPresenter extends BasePresenter<MainView> {


    private MainModel mainModel;


    public MainPresenter(MainView view) {
        super(view);
    }


    @Override
    protected void initModel() {
        mainModel = new MainModel();
    }




    public void show(){
        mainModel.show(new MainModel.IShowModelCallback(){


                           @Override
                           public void getSuccess(MainBean showBean) {


                               view.onSuccess(showBean);
                           }


                           @Override
                           public void getFaild(String error) {
                               view.onFaild(error);


                           }
                       }
        );
    }

}



IView

public interface IView {
    Context context();

}


BaseActivity

public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity{
    protected P presenter;


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(provideLayoutId());
        initViews();
        initListener();
        presenter=providePresenter();
        initDatas();
    }


    protected abstract P providePresenter();


    protected abstract int provideLayoutId();


    protected abstract void initDatas();


    protected abstract void initListener();


    protected abstract void initViews();


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

}


BasePresenter

public abstract class BasePresenter<V extends IView> {
    protected V view;
    public BasePresenter(V view){
        this.view=view;
        initModel();
    }


    protected abstract void initModel();
    void onDestroy(){
        view=null;
    }

}


MainActivity

public class MainActivity extends BaseActivity<MainPresenter> implements View.OnClickListener,MainView {
    private static final String TAG = "MainActivity--";
    private Button mLinearBtn;
    private Button mGridBtn;
    private Button mStBtn;
    private RecyclerView recyclerView;
    private MyAdapter adapter;
    private List<MainBean.DataBean> list = new ArrayList<>();
    private MyAdapter myAdapter;


    @Override
    protected void initViews() {
        mLinearBtn = findViewById(btn_linear_main);
        mGridBtn = findViewById(R.id.btn_grid_main);
        mStBtn = findViewById(R.id.btn_st_main);
        recyclerView = findViewById(R.id.rv_show_main);


        mLinearBtn.setOnClickListener(this);
        mGridBtn.setOnClickListener(this);
        mStBtn.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_linear_main:
                LinearLayoutManager linearLayoutManager = new LinearLayoutManager(MainActivity.this);
                linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
                recyclerView.setLayoutManager(linearLayoutManager);
                break;
            case R.id.btn_grid_main:
                GridLayoutManager gridLayoutManager = new GridLayoutManager(MainActivity.this,5);
                gridLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
                recyclerView.setLayoutManager(gridLayoutManager);
                break;
            case R.id.btn_st_main:
                StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(4,StaggeredGridLayoutManager.VERTICAL);
                recyclerView.setLayoutManager(staggeredGridLayoutManager);
                break;
            default:
                break;
        }
    }


    @Override
    public Context context() {
        return this;
    }


    @Override
    public void onSuccess(MainBean loginBean) {
        List<MainBean.DataBean> data = loginBean.getData();
        list.addAll(data);
        myAdapter = new MyAdapter(list);
        adapter = new MyAdapter(list);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(MainActivity.this);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setAdapter(adapter);


    }


    @Override
    public void onFaild(String error) {


    }


    @Override
    protected MainPresenter providePresenter() {
        return new MainPresenter(this);
    }


    @Override
    protected int provideLayoutId() {
        return R.layout.activity_main;
    }


    @Override
    protected void initDatas() {
         presenter.show();
    }


    @Override
    protected void initListener() {


    }




}

猜你喜欢

转载自blog.csdn.net/qq_41637459/article/details/80764875