OkHttp,MVP,RecyclerView瀑布流

来源:互联网 发布:舔美网络大v 编辑:程序博客网 时间:2024/06/06 20:36

//依赖

compile 'com.squareup.okhttp3:okhttp:3.9.0'compile 'com.google.code.gson:gson:2.8.2'compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'compile 'com.github.bumptech.glide:glide:3.7.0'


//权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

//主布局activity_main

<?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" tools:context="com.bwei.my.MainActivity">    <android.support.v7.widget.RecyclerView        android:id="@+id/recyclerView"        android:layout_width="match_parent"        android:layout_height="match_parent">    </android.support.v7.widget.RecyclerView></LinearLayout>


//layout_img


<?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">    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/img"        /></LinearLayout> model层HttpUtils
import android.os.Handler;import android.util.Log;import com.google.gson.Gson;import java.io.IOException;import java.util.Map;import okhttp3.Call;import okhttp3.Callback;import okhttp3.FormBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;/** * Created by 壹颗大金星 on 2017/11/9. */public class HttpUtils {    private static volatile HttpUtils instance;    private static Handler handler = new Handler();    private HttpUtils(){    }    public static HttpUtils getInstance() {        if (instance == null) {            synchronized (HttpUtils.class) {                if (instance == null) {                    instance = new HttpUtils();                }            }        }        return instance;    }    //get请求    public void get(String url, Map<String,String> map, final CallBack callBack, final Class c,String tag){        //url和参数做拼接处理        StringBuffer stringBuffer = new StringBuffer();        stringBuffer.append(url);        //判断是否存在?   if中是存在        if(stringBuffer.indexOf("?")!=-1 ){            //判断?是否在最后一位    if中是不在最后一位            if(stringBuffer.indexOf("?")!=stringBuffer.length()-1){                stringBuffer.append("&");            }        }else{            stringBuffer.append("?");        }        for(Map.Entry<String,String> entry:map.entrySet()){            stringBuffer.append(entry.getKey())                    .append("=")                    .append(entry.getValue())                    .append("&");        }        //判断是否存在&   if中是存在        if(stringBuffer.indexOf("&")!=-1){            stringBuffer.deleteCharAt(stringBuffer.lastIndexOf("&"));        }        //1:创建OkHttpClient对象        OkHttpClient okHttpClient = new OkHttpClient.Builder().build();        //2:创建Request对象        final Request request = new Request.Builder()                .get()                .url(stringBuffer.toString())                .build();        //3:创建Call对象        Call call = okHttpClient.newCall(request);        //4:请求网络        call.enqueue(new Callback() {            //请求失败            @Override            public void onFailure(Call call, final IOException e) {                handler.post(new Runnable() {                    @Override                    public void run() {                        callBack.onFailed(e);                    }                });            }            //请求成功            @Override            public void onResponse(Call call, Response response) throws IOException {                String result = response.body().string();                Log.e("TAG",result.toString());                //拿到数据解析                final Object o = new Gson().fromJson(result, c);                Log.i("hhh", o+"");                //当前是在子线程,回到主线程中                handler.post(new Runnable() {                    @Override                    public void run() {                        //回调                        callBack.onSuccess("hh",o);                    }                });            }        });    }    //post请求    public void post(String url, Map<String,String> map, final CallBack callBack, final Class c,String tag){        //1:创建OkHttpClient对象        OkHttpClient okHttpClient = new OkHttpClient();        //2:提供post请求需要的body对象        FormBody.Builder builder = new FormBody.Builder();        for(Map.Entry<String,String> entry:map.entrySet()){            builder.add(entry.getKey(),entry.getValue());        }        FormBody body = builder.build();        //3:创建Request对象        final Request request = new Request.Builder()                .post(body)                .url(url)                .build();        //4:创建Call对象        Call call = okHttpClient.newCall(request);        //5:请求网络        call.enqueue(new Callback() {            //请求失败            @Override            public void onFailure(Call call, final IOException e) {                handler.post(new Runnable() {                    @Override                    public void run() {                        callBack.onFailed(e);                    }                });            }            //请求成功            @Override            public void onResponse(Call call, Response response) throws IOException {                String result = response.body().string();                //拿到数据解析                final Object o = new Gson().fromJson(result, c);                //当前是在子线程,回到主线程中                handler.post(new Runnable() {                    @Override                    public void run() {                        //回调                        callBack.onSuccess("hh",o);                    }                });            }        });    }}CallBack接口
public interface CallBack {    void onSuccess(String tag,Object o);    void onFailed(Exception e);}
 
Iv接口

import com.bwei.my.bean.ImgBean;import java.util.ArrayList;import java.util.List;/** * Created by HQ on 2017/11/14. */public interface Iv {    void onSuccess(List<ImgBean> list);    void onFiled( Exception e);}


bean包


Bean类



view层

import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.StaggeredGridLayoutManager;import android.view.View;import android.widget.Button;import com.bwei.my.adapter.PuAdapter;import com.bwei.my.bean.ImgBean;import com.bwei.my.model.Iv;import com.bwei.my.presenter.Presenter;import java.util.List;public class MainActivity extends AppCompatActivity implements Iv {    private RecyclerView recyclerView;    private Presenter presenter;    private PuAdapter puAdapter;    private StaggeredGridLayoutManager sta;    private Button btn;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        recyclerView = (RecyclerView) findViewById(R.id.recyclerView);        btn=(Button)findViewById(R.id.btn);        presenter = new Presenter(MainActivity.this, this);        presenter.pu();        btn.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                Intent intent = new Intent(MainActivity.this, Main2Activity.class);                startActivity(intent);            }        });         sta =new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);         recyclerView.setLayoutManager(sta);    }    @Override    public void onSuccess(List<ImgBean> list) {         puAdapter = new PuAdapter(MainActivity.this, list);         recyclerView.setAdapter(puAdapter);        puAdapter.setOnJump(new PuAdapter.OnJump() {            @Override            public void item() {                Intent intent=new Intent(MainActivity.this,Main2Activity.class);                startActivity(intent);            }        });         puAdapter.notifyDataSetChanged();    }    @Override    public void onFiled(Exception e) {    }}



 presenter包
import android.content.Context;import android.util.Log;import com.bwei.my.bean.Bean;import com.bwei.my.bean.ImgBean;import com.bwei.my.model.CallBack;import com.bwei.my.model.HttpUtils;import com.bwei.my.model.Iv;import java.util.ArrayList;import java.util.HashMap;import java.util.List;/** * Created by HQ on 2017/11/20. */public class Presenter {    private Context context;    private Iv iv;    List<ImgBean> list=new ArrayList<ImgBean>();    public Presenter(Context context, Iv iv) {        this.context = context;        this.iv = iv;    }    //瀑布流的方法    public void pu(){        HashMap<String,String> map = new HashMap<>();        HttpUtils.getInstance().post("http://result.eolinker.com/umIPmfS6c83237d9c70c7c9510c9b0f97171a308d13b611?uri=homepage", map, new CallBack() {            @Override            public void onSuccess(String tag,Object o) {                Bean bean=(Bean)o;                Bean.DataBean data = bean.getData();                List<Bean.DataBean.Ad1Bean> ad1 = data.getAd1();                for(int i=0;i<ad1.size();i++){                    String image = ad1.get(i).getImage();                    list.add(new ImgBean(image));                }                List<Bean.DataBean.Ad5Bean> ad5 = data.getAd5();                for (int j=0;j<ad5.size();j++){                    String image = ad5.get(j).getImage();                    list.add(new ImgBean(image));                }                List<Bean.DataBean.Ad8Bean> ad8 = data.getAd8();                for (int e=0;e<ad8.size();e++){                    String image = ad8.get(e).getImage();                    list.add(new ImgBean(image));                }                Log.e("eee",list.toString());                 iv.onSuccess(list);            }            @Override            public void onFailed(Exception e) {                iv.onFiled(e);            }        }, Bean.class,"hh");    }}adapter包
import android.content.Context;import android.support.v7.widget.RecyclerView;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import com.bumptech.glide.Glide;import com.bwei.my.R;import com.bwei.my.bean.ImgBean;import java.util.List;/** * Created by HQ on 2017/11/20. */public class PuAdapter  extends RecyclerView.Adapter<PuAdapter.ViewHolder> {    private Context context;    private List<ImgBean> list;    public PuAdapter(Context context, List<ImgBean> list) {        this.context = context;        this.list = list;    }    //点击事件的接口    private OnJump jump;    public interface OnJump{        void item();    }    public void setOnJump(OnJump jump){        this.jump=jump;    }    @Override    public PuAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View v = View.inflate(context, R.layout.layout_img, null);        ViewHolder holder = new ViewHolder(v);        return holder;    }    @Override    public void onBindViewHolder(PuAdapter.ViewHolder holder, int position) {        Glide.with(context).load(list.get(position).getImg()).into(holder.img);        
        //holder.tv_title.setText(list.get(position).getName());

 //点击事件
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void
onClick(View view) {
jump.item();
}
});
}
@Override
public int
getItemCount() {
if (list == null) {
return 0;
}
return list.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {
private ImageView img;
        //private final TextView tv_title;
public ViewHolder(View itemView) {
super(itemView);
img =(ImageView)itemView.findViewById(R.id.img);
         // tv_title = (TextView)itemView.findViewById(R.id.tv_title);

} }}
 


bean包

public class ImgBean {    private String img;    public ImgBean(String img) {        this.img = img;    }    public String getImg() {        return img;    }    public void setImg(String img) {        this.img = img;    }    @Override    public String toString() {        return "ImgBean{" +                "img='" + img + '\'' +                '}';    }}