依赖
implementation 'com.squareup.okhttp3:okhttp:3.2.0'
implementation 'com.squareup.okio:okio:1.7.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
implementation 'com.android.support:recyclerview-v7:28.+
Bean类根据接口解析,Image_Loader图片展示
activity
public class ShowActivity extends AppCompatActivity implements ShowView {
private RecyclerView rlv;
private ShowPresenter showPresenter;
//view - presenter -model -presenter -view =UI界面
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show);
//找控件
rlv = findViewById(R.id.rlv);
//创建ShowPresenter实例化presenter
showPresenter = new ShowPresenter(this);
//关联,目的是为了使用弱引用管理外部类对象
//showPresenter.attachView(this);
//片关联m
showPresenter.related();
}
@Override
public void show(List<Result> result) {
//把数据传给适配器
MyAdapter myAdapter = new MyAdapter(ShowActivity.this, result);
//recycleview的布局管理器
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
//设置布局管理器
rlv.setLayoutManager(linearLayoutManager);
rlv.setAdapter(myAdapter);
}
}
Presenter
package Presenter;
import com.list.weekone.bean.Result;
import java.util.List;
import Model.ShowModel;
import View.ShowView;
public class ShowPresenter {
private final ShowModel showModel;
private final ShowView showView;
//创建构造方法
public ShowPresenter(ShowView view) {
showModel = new ShowModel();
showView = view;
}
//p关联m
public void related() {
//创建model和构造方法里实例化model
showModel.getData();//工具类方法
showModel.setOnShowListener(new ShowModel.OnShowListener() {
@Override
public void onShow(List<Result> result) {
//接收回调的数据
//把数据传给view-创建view
showView.show(result);
}
});
}
}
Model
package Model;
import android.net.Uri;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import com.list.weekone.bean.Json;
import com.list.weekone.bean.Result;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.List;
import Utils.OkHttpUtils;
import Utils.ShowUtils;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Response;
public class ShowModel {
//接口
String url = "http://172.17.8.100/small/commodity/v1/bannerShow";
//创建接口
public interface OnShowListener {
void onShow(List<Result> result);
}
//声明接口
public OnShowListener onShowListener;
//创建一个公共的监听方法
public void setOnShowListener(OnShowListener onShowListener) {
this.onShowListener = onShowListener;
}
//创建handler
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
String json = (String) msg.obj;
Gson gson = new Gson();
Json fromJson = gson.fromJson(json, Json.class);
List<Result> result = fromJson.getResult();
//回调数据
if (onShowListener != null) {
onShowListener.onShow(result);
}
break;
}
}
};
//从presenter传到model
//获取网络数据
public void getData() {
//创建untils做封装网络请求之后调用即可
ShowUtils.getInstance().doGet(url, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String json = response.body().string();
Log.i("xxxx", json);
Message message = new Message();
message.what = 0;
message.obj = json;
//handler发送消息
handler.sendMessage(message);
}
});
}
}
View
package View;
import com.list.weekone.bean.Result;
import java.util.List;
public interface ShowView {
void show(List<Result> result);
}
封装好的OkHttpUtils
package Utils;
import android.util.Log;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.logging.HttpLoggingInterceptor;
public class ShowUtils {
//单例模式
private static ShowUtils showUtils = null;
//构造方法
private ShowUtils() {
}
public static ShowUtils getInstance() {
if (showUtils == null) {
//同步锁
synchronized ((ShowUtils.class)) {
if (showUtils == null) {
showUtils = new ShowUtils();
}
}
}
return showUtils;
}
//执行get请求
public static void doGet(String url, Callback callback) {
//创建日志拦截器
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
//打印
Log.i("xxx", message);
}
});
//指定日志拦截器模式
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
//创建OkHttpClient
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(loggingInterceptor)
.build();
//创建request
Request request = new Request.Builder()
.url(url)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(callback);
}
}
Adapter
package com.list.weekone.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.list.weekone.R;
import com.list.weekone.ShowActivity;
import com.list.weekone.bean.Result;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.List;
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
Context context;
List<Result> result;
private int rlv_text = 0;
private int rlv_img = 1;
public MyAdapter(Context context, List<Result> result) {
this.context = context;
this.result = result;
}
//分类型
@Override
public int getItemViewType(int position) {
return position%2;
}
//重写3个方法
@NonNull
@Override
//写视图
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
if (i == 0) {
//布局text
View view = View.inflate(context, R.layout.rlv_text, null);
ViewHolder holder = new ViewHolder(view);
return holder;
} else {
//布局text和img
View view = View.inflate(context, R.layout.rlv_img, null);
ViewHolder2 holder2 = new ViewHolder2(view);
return holder2;
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
//视图设置数据
int type = getItemViewType(i);
if (type==0){
ViewHolder holder = (ViewHolder) viewHolder;
String title = result.get(i).getTitle();
holder.text1.setText(title);
}else {
ViewHolder2 holder2 = (ViewHolder2) viewHolder;
String title = result.get(i).getTitle();
holder2.text2.setText(title);
String imageUrl = result.get(i).getImageUrl();
ImageLoader.getInstance().displayImage(imageUrl,holder2.img2);
}
}
@Override
public int getItemCount() {
/*if (result != null) {
return result.size();
}*/
return result.size();//展示文字
}
//item布局1,展示文字
class ViewHolder extends RecyclerView.ViewHolder {
private final TextView text1;
public ViewHolder(@NonNull View itemView) {
super(itemView);
//找控件
text1 = itemView.findViewById(R.id.text1);
}
}
class ViewHolder2 extends RecyclerView.ViewHolder {
private final TextView text2;
private final ImageView img2;
public ViewHolder2(@NonNull View itemView) {
super(itemView);
//找控件
img2 = itemView.findViewById(R.id.img2);
text2 = itemView.findViewById(R.id.text2);
}
}
}