recylecView

//MianModel
package com.bawei.mmm.model;

import com.bawei.mmm.bean.ListBean;

public interface MainModel {
    void SuccessCallback(ListBean mbean,int page);
    void FailerCallback(int code);
}

//MianModelimpl
package com.bawei.mmm.model;

import android.util.Log;

import com.bawei.mmm.bean.ListBean;
import com.bawei.mmm.untils.OkHttp3Utils;
import com.google.gson.Gson;

import java.io.IOException;

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

public class MainModelImpl {
    private String api="https://www.apiopen.top/meituApi?page=";
    private ListBean listBean;

    public void getdata(final MainModel mainModelListener, final int page) {

        OkHttp3Utils.doget(api, new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                mainModelListener.FailerCallback(1);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String string = response.body().string();
                Log.i("qqq", "onResponse: "+string);
                Gson gson = new Gson();
                listBean = gson.fromJson(string, ListBean.class);
                mainModelListener.SuccessCallback(listBean,page);

            }
        });
    }
}

//MainView
package com.bawei.mmm.view;

import com.bawei.mmm.bean.ListBean;

public interface MainView {
    void SuccessCallback(ListBean vbean);
    void FailerCallback(int code);
}

//MianPersenter

package com.bawei.mmm.presenter;

public interface MainPresenter {
    void ondestroys();
}

//mianPersenterImpl

package com.bawei.mmm.presenter;

import android.util.Log;

import com.bawei.mmm.bean.ListBean;
import com.bawei.mmm.model.MainModel;
import com.bawei.mmm.model.MainModelImpl;
import com.bawei.mmm.view.MainView;

public class MainPresenterImpl implements MainPresenter{
    private MainView mainView;
    private MainModelImpl mainModelImpl;


    public MainPresenterImpl(MainView mainView) {
        this.mainView = mainView;
        this.mainModelImpl = new MainModelImpl();
    }

    public void getdata(int page) {
        mainModelImpl.getdata(new MainModel() {
            @Override
            public void SuccessCallback(ListBean mbean,int page) {
                mainView.SuccessCallback(mbean);
            }

            @Override
            public void FailerCallback(int code) {
                mainView.FailerCallback(code);
            }
        },page);

    }
    @Override
    public void ondestroys() {

        if (mainView!=null) {
            mainView=null;
        }
    }
}


//OKHttp3
package com.bawei.mmm.untils;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
import android.util.Log;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import okhttp3.Cache;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;

public class OkHttp3Utils {
    private static OkHttpClient client = null;

    public OkHttp3Utils() {
    }
    //单列模式(懒汉)初始化okhttp
    public static OkHttpClient getInstance() {
        if (client == null) {
            synchronized (OkHttp3Utils.class) {
                if (client == null)
                    client = new OkHttpClient();
            }
        }
        return client;
    }
    /*
     * doget同步请求方法
     * url  请求链接
     * 通过callback获取结果
     * */
    public static void dogetex(String url){
        Request request = new Request.Builder()
                .url(url)
                .build();
        Call call = getInstance().newCall(request);
        try {
            call.execute();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /*
     * doget异步请求方法
     * url  请求链接
     * 通过callback获取结果
     * */
    public static void doget(String url, Callback callback){
        Request request = new Request.Builder()
                .url(url)
                .build();
        Call call = getInstance().newCall(request);
        call.enqueue(callback);
    }
    /*
     * dopost 方法
     * url
     * map
     * */
    public static void dopost(String url, Map<String,String> map, Callback callback){
        FormBody.Builder  builder=new FormBody.Builder();
        for (String key : map.keySet()) {
            builder.add(key, map.get(key));
        }
        Request request = new Request.Builder()
                .url(url)
                .post(builder.build())
                .build();
        Call call = getInstance().newCall(request);
        call.enqueue(callback);
    }
    /*
     * dopost 方法
     * url
     * json
     * */
    public static void dopostjson(String url, String json, Callback callback){
        RequestBody  body= RequestBody.create(MediaType.parse("application/json; charset=utf-8"),json);
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();
        Call call = getInstance().newCall(request);
        call.enqueue(callback);
    }
    //拦截器
    class MyIntercepter implements Interceptor {
        //intercept 拦截
        @Override
        public Response intercept(Chain chain) throws IOException {
            //添加公共参数
//            post 取出原来所有的参数,将之加到新的请求体里面。然后让请求去执行
            Request request = chain.request();
            //获取请求方法
            String method = request.method();
            if (method.equals("GET")) {//---------------------------GET 拦截
                //取出url地址
                String url = request.url().toString();
                //拼接公共参数
                boolean contains = url.contains("?");
                if (contains) {
                    url = url + "&source=android";
                } else {
                    url = url + "?source=android";
                }

                Request request1 = request.newBuilder().url(url).build();

                Response response = chain.proceed(request1);

                return response;


            } else if (method.equals("POST")) {//---------------------POST 拦截
                RequestBody body = request.body();//请求体
                if (body instanceof FormBody) {
                    //创建新的请求体
                    FormBody.Builder newBuilder = new FormBody.Builder();
                    for (int i = 0; i < ((FormBody) body).size(); i++) {
                        String key = ((FormBody) body).name(i);
                        String value = ((FormBody) body).value(i);
                        newBuilder.add(key, value);
                    }
                    //添加公共参数
                    newBuilder.add("source", "android");
                    FormBody newBody = newBuilder.build();
                    //创建新的请求体
                    Request request1 = request.newBuilder().post(newBody).build();
                    //去请求
                    Response response = chain.proceed(request1);
                    return response;
                }
            }
            return null;
        }
    }
}

//MianAdapter

package com.bawei.mmm.adapter;

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.bawei.mmm.R;
import com.bawei.mmm.bean.ListBean;
import com.bumptech.glide.Glide;

import java.util.List;

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

    private Context context;
    private List<ListBean.DataBean> dataBeans;

    public MyAdapter(Context context, List<ListBean.DataBean> dataBeans) {
        this.context = context;
        this.dataBeans = dataBeans;
    }

    @NonNull
    @Override
    public TextHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        //鑾峰彇瀛愬竷灞€
        LayoutInflater inflater = LayoutInflater.from(context);
        View view = inflater.inflate(R.layout.item_layout, parent, false);
        return new TextHolder(view);
    }

    @Override
    public void onBindViewHolder(TextHolder holder, int position) {
        holder.text_view.setText(dataBeans.get(position).getType());
        String url = dataBeans.get(position).getUrl();
        Glide.with(context).load(url).into(holder.image_view);
    }

    @Override
    public int getItemCount() {
        return dataBeans.size();
    }
    //textholder
    public static class TextHolder extends RecyclerView.ViewHolder{

        public TextView text_view;
        public ImageView image_view;
        public Context context;
        public TextHolder(View itemView) {
            super(itemView);

            image_view = itemView.findViewById(R.id.image_view);
            text_view = itemView.findViewById(R.id.text_view);
        }

    }
}
//MianActivity
package com.bawei.mmm;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.ScrollView;

import com.bawei.mmm.adapter.MyAdapter;
import com.bawei.mmm.bean.ListBean;
import com.bawei.mmm.presenter.MainPresenter;
import com.bawei.mmm.presenter.MainPresenterImpl;
import com.bawei.mmm.view.MainView;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshScrollView;

import java.util.List;

public class MainActivity extends AppCompatActivity implements MainView {

    private RecyclerView recycle_view;
    private MainPresenterImpl presenter;
    private PullToRefreshScrollView pukk_refush_view;
    private int page=1;
    private List<ListBean.DataBean> data;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recycle_view = findViewById(R.id.recycle_view);
        pukk_refush_view = findViewById(R.id.pull_refush_view);
        //实例化p层
        presenter = new MainPresenterImpl(this);
        presenter.getdata(page);
        pukk_refush_view.setMode(PullToRefreshBase.Mode.BOTH);
        //布局管理器
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
        recycle_view.setLayoutManager(linearLayoutManager);
        pukk_refush_view.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {
            @Override
            public void onPullDownToRefresh(PullToRefreshBase<ScrollView> pullToRefreshBase) {
                page=1;
                presenter.getdata(page);
                pukk_refush_view.onRefreshComplete();
            }

            @Override
            public void onPullUpToRefresh(PullToRefreshBase<ScrollView> pullToRefreshBase) {
                page++;
                presenter.getdata(page);
                pukk_refush_view.onRefreshComplete();

            }
        });

      //  recycle_view.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));



    }

    @Override
    public void SuccessCallback(final ListBean vbean) {
        data = vbean.getData();
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                    Log.e("gg", "SuccessCallback: "+data.toString() );
                    MyAdapter adapter = new MyAdapter(MainActivity.this,data);
                    recycle_view.setAdapter(adapter);
                    pukk_refush_view.onRefreshComplete();

            }
        });

    }

    @Override
    public void FailerCallback(int code) {

    }
}

//布局

<?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="match_parent"
    android:orientation="vertical">

    <!-- app bar -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center_vertical"
        android:orientation="horizontal">

        <TextView
            android:layout_width="130dp"
            android:layout_height="35dp"
            android:drawableLeft="@drawable/biao"
            android:drawableRight="@drawable/jian"
            android:gravity="center"
            android:singleLine="true"
            android:text="北京八维教育中心" />

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="5dp"
            android:layout_weight="1"

            android:paddingLeft="40dp"
            android:paddingRight="40dp">

            <EditText
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@null"

                android:hint="搜索附近的吃喝玩乐"
                android:singleLine="true"
                android:textSize="13sp" />
        </LinearLayout>

        <ImageView
            android:id="@+id/iv_head"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:padding="3dp"
            />
    </LinearLayout>
    <!-- 列表 -->

    <com.handmark.pulltorefresh.library.PullToRefreshScrollView android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:id="@+id/pull_refush_view"
        xmlns:android="http://schemas.android.com/apk/res/android">



        <android.support.v7.widget.RecyclerView
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:id="@+id/recycle_view" />
    </com.handmark.pulltorefresh.library.PullToRefreshScrollView>

</LinearLayout>



//依赖

    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
    implementation 'com.google.code.gson:gson:2.8.2'
    implementation 'com.github.bumptech.glide:glide:4.6.1'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1'
    implementation 'com.github.userswlwork:pull-to-refresh:1.0.0'
    implementation 'com.android.support:recyclerview-v7:27.1.1'

    implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
    implementation 'com.github.bumptech.glide:glide:3.7.0'



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值