//依赖
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层 HttpUtilsbean包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类
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 + '\'' + '}'; } }