//main
public class MainActivity extends AppCompatActivity implements DataView {
private RecyclerView main_recyclerView;
private Adapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化视图
initView();
//初始化数据
initData();
}
private void initData() {
new DataPresenter().onCreate(this).loadData();
}
//获取资源ID
private void initView() {
main_recyclerView = findViewById(R.id.main_recyclerview);
//创建适配器Adapter
adapter = new Adapter(MainActivity.this);
main_recyclerView.setAdapter(adapter);
//设置布局管理器
main_recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this,OrientationHelper.VERTICAL,false));
//Gridview
// main_recyclerView.setLayoutManager(new GridLayoutManager(this,2));
}
//成功
@Override
public void success(List<DataEntity.DataBean> dataBeans) {
adapter.setData(dataBeans);
}
//失败
@Override
public void defeated() {
}
}
//View层
public interface DataView {
void success(List<DataEntity.DataBean> dataBeans);
void defeated();
}
//OkHttpUtils
public class OkHttpUtils {
public static OkHttpUtils instance=new OkHttpUtils();
public static OkHttpUtils getInstance() {
return instance;
}
public void getOkHttp(String path,final OkHttp okhttp){
//创建OkHttpClient对象,设置读取,写入,连接超时
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(10,TimeUnit.SECONDS)
.writeTimeout(10,TimeUnit.SECONDS)
.connectTimeout(10,TimeUnit.SECONDS)
.build();
//创建Request对象,设置请求方式,请求接口地址
Request request = new Request.Builder()
.get()
.url(API.PATH)
.build();
//创建Call对象
Call call = okHttpClient.newCall(request);
//通过call调用enqueu方法 完成网络请求
call.enqueue(new Callback() {
//失败
@Override
public void onFailure(Call call, IOException e) {
okhttp.defeated();
}
//成功
@Override
public void onResponse(Call call, Response response) throws IOException {
String result = response.body().string();
okhttp.success(result);
}
});
}
//使用接口回调
public interface OkHttp{
//成功
void success(String result);
//失败
void defeated();
}
}
//API层
public class API {
public static final String PATH=“http://www.zhaoapi.cn/product/searchProducts?keywords=笔记本&page=1”;
}
//Presenter层
public class DataPresenter {
private DataView dataView;
private DataView mView;
//创建V层
public DataPresenter onCreate(DataView view) {
this.mView=view;
return this;
}
public void loadData(){
new DataModel().getData(OkHttpUtils.getInstance(), new DataModel.Callback() {
//成功
@Override
public void success(List<DataEntity.DataBean> data) {
mView.success(data);
}
//失败
@Override
public void defeated() {
mView.defeated();
}
});
}
}
//Model层
public class DataModel {
//解析数据
public void getData(OkHttpUtils httpUtils, final Callback callback) {
httpUtils.getOkHttp(API.PATH, new OkHttpUtils.OkHttp() {
//成功
@Override
public void success(String result) {
//解析数据
DataEntity dataEntity = new Gson().fromJson(result, DataEntity.class);
List<DataEntity.DataBean> data = dataEntity.getData();
callback.success(data);
}
//失败
@Override
public void defeated() {
callback.defeated();
}
});
}
//设置接口
public interface Callback{
//成功
void success(List<DataEntity.DataBean> data);
//失败
void defeated();
}
}
//Adapter
public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
private Context context;
private List<DataEntity.DataBean> dataBeans;
public Adapter(Context context) {
this.context = context;
dataBeans=new ArrayList<>();
}
public void setData(List<DataEntity.DataBean> dataBeans) {
this.dataBeans .clear();
if (dataBeans!=null){
this.dataBeans.addAll(dataBeans);
}
notifyDataSetChanged();
}
@NonNull
@Override
public Adapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(this.context, R.layout.recycler_view, null);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull Adapter.ViewHolder viewHolder, int i) {
viewHolder.title.setText(this.dataBeans.get(i).getTitle());
//Glide
String[] image1 = this.dataBeans.get(i).getImages().split("\\|");
if (image1!=null&&image1.length>0){
Glide.with(context).load(image1[0]).into(viewHolder.image);
}else{
viewHolder.image.setImageResource(R.mipmap.ic_launcher);
}
}
@Override
public int getItemCount() {
return this.dataBeans.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView title;
private ImageView image;
public ViewHolder(@NonNull View itemView) {
super(itemView);
title = itemView.findViewById(R.id.title);
image = itemView.findViewById(R.id.image);
}
}
}
//main布局
<android.support.v7.widget.RecyclerView
android:id="@+id/main_recyclerview"
android:layout_width=“match_parent”
android:layout_height=“match_parent”>
</android.support.v7.widget.RecyclerView>