拦截器依赖 implementation 'com.squareup.okhttp3:logging-interceptor:3.11.0'
写xrecycler之前必须把recycler的依赖导入,也就是说导两个依赖一个recycler和xrecycler
implementation 'com.android.support:recyclerview-v7:28.0.0' implementation ('com.jcodecraeer:xrecyclerview:1.5.9'){ exclude group: 'com.android.support' }
拦截器加日志
package com.example.kao13.util;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
/**
* 封装工具类
* 需要用到单例设计模式
* 1:懒汉式
* 2:饿汉式
* 3:DCL
* 4:容器模式(前面三种都不是很完善的处理单例)
* <p>
* 单例模式:保证这个内存空间里面只能有实例
* 1:私有化构造器? 保证其他类不能创建实例
* 2:想到了这个实例在这个内存空间还要提供给别的类使用所以要封装成一个方法让人调用
*/
public class OkHttpUtils {
private OkHttpClient mOkHttpClient;
private String string;
private OkHttpUtils() {
HttpLoggingInterceptor interceptor=new HttpLoggingInterceptor();
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
mOkHttpClient=new OkHttpClient.Builder()
.connectTimeout(10,TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.readTimeout(10,TimeUnit.SECONDS)
.addInterceptor(interceptor)
.build();
mOkHttpClient = new OkHttpClient();
}
public static OkHttpUtils getInstance() {
return OkHttpHolder.utils;
}
static class OkHttpHolder {
private static final OkHttpUtils utils = new OkHttpUtils();
}
//封装同步的Get请求方式
public String get(String url,String mobile,String password) throws IOException {
Request request=new Request.Builder().url(url+"?mobile="+mobile+"&password="+password).build();
Response execute = mOkHttpClient.newCall(request).execute();
return execute.body().string();
}
public String getHome(String url) throws IOException {
Request request=new Request.Builder().url(url).build();
Response execute = mOkHttpClient.newCall(request).execute();
return execute.body().string();
}
public String post(String url){
try {
RequestBody requestBody = new FormBody.Builder()
.add("mobile", "18730098284")
.add("password", "123456")
.build();
Request request = new Request.Builder().url(url).post(requestBody).build();
//发送请求newCall方法
string = mOkHttpClient.newCall(request).execute().body().string();
//通过call去处理给你响应Response
} catch (IOException e) {
e.printStackTrace();
}
return string;
}
}
三种布局按钮切换
package com.example.kao13;
import android.media.Image;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import com.example.kao13.adapter.BiaoAdapter;
import com.example.kao13.adapter.LiuAdapter;
import com.example.kao13.adapter.WangAdapter;
import com.example.kao13.bean.Mybean;
import com.example.kao13.presenter.PresenterImpl;
import com.example.kao13.view.MyView;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements MyView, View.OnClickListener {
private Button b1;
private Button b2;
private Button b3;
private XRecyclerView recy;
private String mUrl="http://www.zhaoapi.cn/product/getCatagory";
private PresenterImpl presenter;
private List<Mybean.DataBean> list;
private List<ImageView> image=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
//initData();
}
private void initData() {
for (int i = 0; i < list.size(); i++) {
ImageView imageView=new ImageView(this);
image.add(imageView);
}
}
@Override
public void success(Mybean data) {
list = data.getData();
}
@Override
public void error(String error) {
Toast.makeText(this, error, Toast.LENGTH_SHORT).show();
}
private void initView() {
b1 = (Button) findViewById(R.id.b1);
b2 = (Button) findViewById(R.id.b2);
b3 = (Button) findViewById(R.id.b3);
recy = findViewById(R.id.recy);
b1.setOnClickListener(this);
b2.setOnClickListener(this);
b3.setOnClickListener(this);
presenter=new PresenterImpl(this);
presenter.startRequest(mUrl);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.b1:
LinearLayoutManager manager=new LinearLayoutManager(this);
recy.setLayoutManager(manager);
BiaoAdapter adapter=new BiaoAdapter(list);
recy.setAdapter(adapter);
break;
case R.id.b2:
GridLayoutManager manager1=new GridLayoutManager(this,5);
recy.setLayoutManager(manager1);
WangAdapter adapter1=new WangAdapter(list);
recy.setAdapter(adapter1);
break;
case R.id.b3:
recy.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL));
recy.setItemAnimator(new DefaultItemAnimator());
recy.setPullRefreshEnabled(true);
recy.setLoadingMoreEnabled(true);
recy.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
list.clear();
presenter.startRequest(mUrl);
recy.refreshComplete();
}
@Override
public void onLoadMore() {
presenter.startRequest(mUrl);
recy.loadMoreComplete();
}
});
LiuAdapter adapter2=new LiuAdapter(list,this);
recy.setAdapter(adapter2);
break;
}
}
}
表布局
package com.example.kao13.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.TextView;
import com.example.kao13.R;
import com.example.kao13.bean.Mybean;
import java.util.List;
public class BiaoAdapter extends RecyclerView.Adapter<BiaoAdapter.ViewHolder> {
private List<Mybean.DataBean>list;
public BiaoAdapter(List<Mybean.DataBean> list) {
this.list = list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.biao,null);
ViewHolder viewHolder=new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
viewHolder.textView.setText(list.get(i).getName());
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
textView=itemView.findViewById(R.id.biao_text);
}
}
}
网格布局
package com.example.kao13.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.TextView;
import com.example.kao13.R;
import com.example.kao13.bean.Mybean;
import java.util.List;
public class BiaoAdapter extends RecyclerView.Adapter<BiaoAdapter.ViewHolder> {
private List<Mybean.DataBean>list;
public BiaoAdapter(List<Mybean.DataBean> list) {
this.list = list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.biao,null);
ViewHolder viewHolder=new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
viewHolder.textView.setText(list.get(i).getName());
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView textView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
textView=itemView.findViewById(R.id.biao_text);
}
}
}
瀑布流
package com.example.kao13.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.bumptech.glide.Glide;
import com.example.kao13.R;
import com.example.kao13.bean.Mybean;
import java.util.List;
import java.util.Random;
public class LiuAdapter extends RecyclerView.Adapter<LiuAdapter.ViewHoder> {
private List<Mybean.DataBean> list;
private Context context;
public LiuAdapter(List<Mybean.DataBean> list, Context context) {
this.list = list;
this.context = context;
}
@NonNull
@Override
public LiuAdapter.ViewHoder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.liu,viewGroup,false);
ViewHoder viewHolder=new ViewHoder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull LiuAdapter.ViewHoder viewHoder, int i) {
ViewGroup.LayoutParams params = viewHoder.itemView.getLayoutParams();
Random random = new Random();
int height = random.nextInt(300) + 300;
params.height = height;
viewHoder.itemView.setLayoutParams(params);
Glide.with(context).load(list.get(i).getIcon()).into(viewHoder.imageView);
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHoder extends RecyclerView.ViewHolder {
ImageView imageView;
public ViewHoder(@NonNull View itemView) {
super(itemView);
imageView=itemView.findViewById(R.id.image);
}
}
}