OkHttp,MVP,RecyclerView瀑布流

//依赖

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 + '\'' +
                '}';
    }
}

 



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RecyclerViewOkHttp 都是 Android 开发中非常常用的库。 RecyclerView 是 Android 官方在 API level 21 中推出的一个用于列表展示的组件,相比起 ListView,RecyclerView 的优点在于支持更加丰富的布局和动画,并且可以通过 ViewHolder 模式进行更高效的显示和数据更新。而且它也可以很好地与其他组件进行集成,比如 SwipeRefreshLayout、ItemTouchHelper 等等,为开发者提供了更丰富的选项。 而 OkHttp 则是一款非常流行的 HTTP 客户端库,它的优点在于简单易用,性能好且支持丰富的功能。通过 OkHttp,我们可以轻松地发起 HTTP 请求,并且可以直接将响应数据转化为常用的格式(比如 JSON)。同时,OkHttp 也支持网络拦截器、缓存、连接池、SSL、WebSocket 等特性,从而满足开发者在实际开发中的需求。 结合 RecyclerViewOkHttp,我们可以实现许多常见的需求。比如,我们可以通过 OkHttp 发起网络请求获取数据,并且通过 RecyclerView 将这些数据在列表中进行展示。我们也可以通过 OkHttp 实现图片的异步加载,并且使用 RecyclerView 实现图片列表的展示。当然,如果需要更加高级的功能,比如分页、筛选、搜索等,开发者也可以借助 OkHttpRecyclerView 的优势来实现这些功能。 综上所述,RecyclerViewOkHttp 都是非常好用的 Android 库,开发者在日常工作中都会频繁使用它们。当然,开发者也需要结合自身的实际情况,根据项目需求来选择合适的库,从而更快更好地进行开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值