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层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 + '\'' + '}'; }}
阅读全文
0 0
- OkHttp,MVP,RecyclerView瀑布流
- recyclerView+MVP实现瀑布流
- OkHttp+RecyclerView加载图片瀑布流
- Android RecyclerView瀑布流展示(OkHttp协议)
- mvp+Recyclerview+okhttp+Springview
- mvp+okhttp+recyclerview
- mvp,okhttp,recyclerview
- okhttp+MVP+RecyclerView
- RecyclerView+MVP+OKhttp
- okHttp+Mvp+RecyclerView
- Mvp+RecyclerView+Okhttp
- Mvp框架+okhttp请求+recyclerview
- MVP模式 + RecyclerView瀑布流 + 上拉加载、下拉刷新
- recyclerview网络获取图片展示瀑布流MVP
- 瀑布流OKhttp
- MVP简单实现OKHttp+recyclerview+springview
- MVP泛型+RecyclerView+Retrofit+OkHttp+RxJava
- MVP模式OKhttp请求RecyclerView展示数据
- [leetcode]#9. Palindrome Number
- 遍历Set
- SQL组函数
- C++学习笔记--函数重载
- chrome 隐藏技能之 base64 图片转换(获得dta:image图片代码方法)
- OkHttp,MVP,RecyclerView瀑布流
- JQuery 设置show/hide显示隐藏属性无效的原因
- System.Data.SqlClient.SqlException: 用户 'IIS APPPOOL\y3' 登录失败
- mycat介绍01-mysql读写分离配置
- WebViewProvider的创建
- Centos-6.5系统YUM方式安装Mysql5.1
- 蛇形填数
- 27 个机器学习、数学、Python 速查表
- 前端框架-11-jQuery文档&对象