SYNavBean
public class SYNavBean {
/**
* msg :
* code : 0
* data : [{"cid":1,"createtime":"2017-10-10T19:41:39","icon":"http://120.27.23.105/images/category/shop.png","ishome":1,"name":"京东超市"},{"cid":2,"createtime":"2017-10-10T19:41:39","icon":"http://120.27.23.105/images/category/qqg.png","ishome":1,"name":"全球购"},{"cid":3,"createtime":"2017-10-10T19:45:11","icon":"http://120.27.23.105/images/category/phone.png","ishome":1,"name":"手机数码"},{"cid":5,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/man.png","ishome":1,"name":"男装"},{"cid":6,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/girl.png","ishome":1,"name":"女装"},{"cid":7,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/manshoe.png","ishome":1,"name":"男鞋"},{"cid":8,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/girlshoe.png","ishome":1,"name":"女鞋"},{"cid":9,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/shirt.png","ishome":1,"name":"内衣配饰"},{"cid":10,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/bag.png","ishome":1,"name":"箱包手袋"},{"cid":11,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/beauty.png","ishome":1,"name":"美妆个护"},{"cid":12,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/jewel.png","ishome":1,"name":"钟表珠宝"},{"cid":13,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/luxury.png","ishome":1,"name":"奢侈品"},{"cid":14,"createtime":"2017-10-10T20:12:03","icon":"http://120.27.23.105/images/category/computer.png","ishome":1,"name":"电脑办公"},{"cid":15,"createtime":"2017-09-29T10:13:48","icon":"http://120.27.23.105/images/icon.png","ishome":0,"name":"家用电器"},{"cid":16,"createtime":"2017-09-29T10:13:48","icon":"http://120.27.23.105/images/icon.png","ishome":0,"name":"食品生鲜"},{"cid":17,"createtime":"2017-09-29T10:13:48","icon":"http://120.27.23.105/images/icon.png","ishome":0,"name":"酒水饮料"},{"cid":18,"createtime":"2017-09-29T10:13:48","icon":"http://120.27.23.105/images/icon.png","ishome":0,"name":"母婴童装"},{"cid":19,"createtime":"2017-09-29T10:13:48","icon":"http://120.27.23.105/images/icon.png","ishome":0,"name":"玩具乐器"},{"cid":20,"createtime":"2017-09-29T10:13:48","icon":"http://120.27.23.105/images/icon.png","ishome":0,"name":"医药保健"}]
*/
private String msg;
private String code;
private List<DataBean> data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
/**
* cid : 1
* createtime : 2017-10-10T19:41:39
* icon : http:
* ishome : 1
* name : 京东超市
*/
private int cid;
private String createtime;
private String icon;
private int ishome;
private String name;
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public int getIshome() {
return ishome;
}
public void setIshome(int ishome) {
this.ishome = ishome;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
model接口和实现类
ISYModel
public interface ISYModel {
void getSYNavData(String url, Map<String, String> params, SYListener syListener );
}
SYBannerModel
public class SYBannerModel implements ISYModel {
private static final String TAG ="SYBannerModel---" ;
@Override
public void getSYNavData(String url, Map<String, String> params, final SYListener syListener) {
OkHttpUtils okHttpUtils = OkHttpUtils.getInstance();
okHttpUtils.doPost(url,params);
okHttpUtils.setOnFinishListener(new OnFinishListener() {
@Override
public void onSuccess(String json) {
syListener.getShouYeSuccess(json);
}
@Override
public void onFailed(String error) {
syListener.getShouYeError(error);
}
});
}
}
presenter的接口和实现类
ISYPresenter
public interface ISYPresenter {
void showNavToView(ISYModel isyModel, ISYView isyView);
}
SYBannerPresenter
public class SYBannerPresenter implements ISYPresenter {
private static final String TAG = "SYBannerPresenter----";
@Override
public void showNavToView(ISYModel isyModel, final ISYView isyView) {
Map<String, String> params = new HashMap<>();
isyModel.getSYNavData(HttpApi.NavUrl, params, new SYListener() {
@Override
public void getShouYeSuccess(String json) {
Log.d(TAG, "SYNavPresenter: "+json);
Gson gson=new Gson();
SYNavBean syNavBean = gson.fromJson(json,SYNavBean.class);
List<SYNavBean.DataBean> data = syNavBean.getData();
isyView.showSYNavData(data);
}
@Override
public void getShouYeError(String error) {
Log.d(TAG, "getShouYeError: "+error);
}
});
}
}
view接口和实现类
ISYView
public interface ISYView {
void showSYNavData(List<SYNavBean.DataBean> data);
}
MainActivity
public class MainActivity extends AppCompatActivity implements ISYView {
private SYBannerPresenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
presenter = new SYBannerPresenter();
presenter.showNavToView(new SYBannerModel(),this);
}
@Override
public void showSYNavData(List<SYNavBean.DataBean> data) {
SYNavAdapter syNavAdapter=new SYNavAdapter(getContext(),data);
sy_nav.setLayoutManager(new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.HORIZONTAL));
sy_nav.setAdapter(syNavAdapter);
}
}
OkHttpUtils
public class OkHttpUtils {
private static final String TAG = "OkHttpUtils-----";
private static OkHttpUtils okHttpUtils;
private final int SUCCESS = 0;
private final int ERROR = 1;
private MyHandler myHandler = new MyHandler();
private OnFinishListener onFinishListener;
public static OkHttpUtils getInstance() {
if (okHttpUtils == null) {
okHttpUtils = new OkHttpUtils();
}
return okHttpUtils;
}
class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case SUCCESS:
String json = (String) msg.obj;
onFinishListener.onSuccess(json);
break;
case ERROR:
String error = (String) msg.obj;
onFinishListener.onFailed(error);
break;
}
}
}
public void doGet(String url) {
OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new MyIntercepter()).build();
Request request = new Request.Builder().url(url).build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Message message = myHandler.obtainMessage();
message.what = ERROR;
message.obj = e.getMessage();
myHandler.sendMessage(message);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Message message = myHandler.obtainMessage();
message.what = SUCCESS;
message.obj = response.body().string();
myHandler.sendMessage(message);
}
});
}
public void setOnFinishListener(OnFinishListener onFinishListener) {
this.onFinishListener = onFinishListener;
}
public void doPost(String url, Map<String, String> params) {
OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new MyIntercepter()).build();
FormBody.Builder builder = new FormBody.Builder();
Set<String> keySet = params.keySet();
for (String key :
keySet) {
String value = params.get(key);
builder.add(key, value);
}
FormBody formBody = builder.build();
Request request = new Request.Builder().url(url).post(formBody).build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Message message = myHandler.obtainMessage();
message.what = ERROR;
message.obj = e.getMessage();
myHandler.sendMessage(message);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Message message = myHandler.obtainMessage();
message.what = SUCCESS;
message.obj = response.body().string();
myHandler.sendMessage(message);
}
});
}
class MyIntercepter implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
String method = request.method();
if (method.equals("GET")) {
String url = request.url().toString();
boolean contains = url.contains("?");
if (contains) {
url = url + "&source=android";
} else {
url = url + "?source=android";
}
Request request1 = request.newBuilder().url(url).build();
Response response = chain.proceed(request1);
return response;
} else if (method.equals("POST")) {
RequestBody body = request.body();
if (body instanceof FormBody) {
FormBody.Builder newBuilder = new FormBody.Builder();
for (int i = 0; i < ((FormBody) body).size(); i++) {
String key = ((FormBody) body).name(i);
String value = ((FormBody) body).value(i);
newBuilder.add(key, value);
}
newBuilder.add("source", "android");
FormBody newBody = newBuilder.build();
Request request1 = request.newBuilder().post(newBody).build();
Response response = chain.proceed(request1);
return response;
}
}
return null;
}
}
public void upLoadImage(String url, String path) {
MediaType mediaType = MediaType.parse("image/*");
MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);
File file = new File(path);
MultipartBody multipartBody = builder.addFormDataPart("file", file.getName(), RequestBody.create(mediaType, file)).build();
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url(url).post(multipartBody).build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d(TAG, "上传失败0----: ");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Log.d(TAG, "上传成功: ");
}
});
}
}
OnFinishListener
public interface OnFinishListener {
void onSuccess(String json);
void onFailed(String error);
}
SYNavAdapter
public class SYNavAdapter extends RecyclerView.Adapter<SYNavAdapter.MyViewHolder> {
private Context context;
private List<SYNavBean.DataBean> list;
public SYNavAdapter(Context context, List<SYNavBean.DataBean> list) {
this.context = context;
this.list = list;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(context, R.layout.fragment_sy_nav, null);
MyViewHolder myViewHolder = new MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Glide.with(context).load(list.get(position).getIcon()).into(holder.getImageView());
holder.getTextView().setText(list.get(position).getName());
}
@Override
public int getItemCount() {
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
private ImageView imageView;
private TextView textView;
public MyViewHolder(View itemView, ImageView imageView, TextView textView) {
super(itemView);
this.imageView = imageView;
this.textView = textView;
}
public MyViewHolder(View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.sy_nav_pic);
textView = itemView.findViewById(R.id.sy_nav_title);
}
public ImageView getImageView() {
return imageView;
}
public void setImageView(ImageView imageView) {
this.imageView = imageView;
}
public TextView getTextView() {
return textView;
}
public void setTextView(TextView textView) {
this.textView = textView;
}
}
}
HttpApi
public class HttpApi {
public static final String NavUrl="https://www.zhaoapi.cn/product/getCatagory";
}
SYListener
public interface SYListener {
void getShouYeSuccess(String json);
void getShouYeError(String error);
}