OkHttp工具类
package com.bawei.week01_3;
import android.os.Handler;
import android.os.Message;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
/**
* @Author:
* @E-mail:
* @Date:
* @Description:描述信息
*/
public class OkHttpUtils {
private int HTTP_SUCCESS=10;
private int HTTP_FAIL=9;
private HttpListener httpListener;
//get方法 (OkHttpUtils)---->在model层中能获取result方法
public OkHttpUtils get(String url){
getHttp(url,0,null);
return this;
}
public OkHttpUtils post(String url,FormBody.Builder builder1){
getHttp(url,1,builder1);
return this;
}
private void getHttp(String url, int i,FormBody.Builder builder1) {
//添加拦截器
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new LanJie()).build();
Request.Builder builder = new Request.Builder();
if (i==0){
//get请求
builder.url(url);
builder.get();
}else{
//post请求
builder.url(url);
//这里可以通过参数的形式传递过来
//FormBody.Builder builder1 = new FormBody.Builder();
RequestBody requestBody= builder1.build();
builder.post(requestBody);
}
final Request request = builder.build();
//异步请求---》execute()同步
client.newCall(request).enqueue(new Callback() {
Message message=Message.obtain();
@Override
public void onFailure(Call call, IOException e) {
//请求失败
message.what=HTTP_FAIL;
handler.sendMessage(message);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//请求成功--》子线程 所以要发送到主线程中
// response.body().string(); 获取数据
message.obj=response.body().string();
message.what=HTTP_SUCCESS;
handler.sendMessage(message);
}
});
}
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//接收handler
if (msg.what==HTTP_SUCCESS){
//获取数据
String data= (String) msg.obj;
//要传到Model层中 通过一个接口回调的形式
httpListener.success(data);
}else{
httpListener.fail();
}
}
};
//写一个方法 将接口将接口以参数的形式传递
public void result(HttpListener httpListener){
this.httpListener=httpListener;
}
//定义一个接口
public interface HttpListener{
void success(String data);
void fail();
}
//拦截的类
private class LanJie implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
String url = request.url().host();
HttpUrl url1 = request.url();
boolean https = request.isHttps();
String method = request.method();
Log.d("aaa",url+"======="+method+"======="+url1+"====="+https);
return chain.proceed(request);
}
}
}
MainView层
package com.bawei.week01_3.mvp.view;
/**
* @Author:
* @E-mail:
* @Date:
* @Description:描述信息
*/
public interface MainView {
//业务需求
void success(String data);
void fail();
}
MainModel接口层
package com.bawei.week01_3.mvp.model;
/**
* @Author:
* @E-mail:
* @Date:
* @Description:描述信息
*/
public interface MainModel {
public interface CallBack{
void success(String data);
void fail();
}
//获取数据
void getData(CallBack callBack);
}
MainModelIml实现类
package com.bawei.week01_3.mvp.model;
import com.bawei.week01_3.OkHttpUtils;
/**
* @Author:
* @E-mail:
* @Date:
* @Description:描述信息
*/
public class MainModelIml implements MainModel {
private String url="https://www.apiopen.top/novelApi";
@Override
public void getData(final CallBack callBack) {
//通过okhttp来进行获取数据
new OkHttpUtils().get(url).result(new OkHttpUtils.HttpListener() {
@Override
public void success(String data) {
//获取到数据
callBack.success(data);
}
@Override
public void fail() {
callBack.fail();
}
});
}
}
MainPresenter接口层
package com.bawei.week01_3.mvp.presenter;
/**
* @Author:
* @E-mail:
* @Date:
* @Description:描述信息
*/
public interface MainPresenter {
void doData();
}
MainPresenter实现类
package com.bawei.week01_3.mvp.presenter;
import com.bawei.week01_3.mvp.model.MainModel;
import com.bawei.week01_3.mvp.view.MainView;
/**
* @Author:
* @E-mail:
* @Date:
* @Description:描述信息
*/
public class MainPresenterIml implements MainPresenter {
//通过构造拿到model层和view层
private MainModel mainModel;
private MainView mainView;
public MainPresenterIml(MainModel mainModel, MainView mainView){
this.mainModel=mainModel;
this.mainView=mainView;
}
@Override
public void doData() {
mainModel.getData(new MainModel.CallBack() {
@Override
public void success(String data) {
mainView.success(data);
}
@Override
public void fail() {
mainView.fail();
}
});
}
public void destroy() {
if (mainModel!=null){
mainModel=null;
}
if (mainView!=null){
mainView=null;
}
System.gc();
}
}
MainActivity
package com.bawei.week01_3;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.StaggeredGridLayoutManager;
import com.bawei.week01_3.adapter.MoreAdapter;
import com.bawei.week01_3.adapter.MyAdapter;
import com.bawei.week01_3.bean.Data;
import com.bawei.week01_3.bean.NewsData;
import com.bawei.week01_3.mvp.model.MainModel;
import com.bawei.week01_3.mvp.model.MainModelIml;
import com.bawei.week01_3.mvp.presenter.MainPresenterIml;
import com.bawei.week01_3.mvp.view.MainView;
import com.google.gson.Gson;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity implements MainView {
private XRecyclerView x_recycler;
private MainPresenterIml mainPresenterIml;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//找控件
x_recycler =(XRecyclerView) findViewById(R.id.x_recycler);
//设置XRecyclerView的布局管理器
//LinearLayoutManager-->线性
//GridLayoutManager--->网格
//StaggeredGridLayoutManager--->瀑布流
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(MainActivity.this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
x_recycler.setLayoutManager(linearLayoutManager);
//实例化Presenter层
mainPresenterIml = new MainPresenterIml(new MainModelIml(), this);
//调用posenter层的fangf
mainPresenterIml.doData();
x_recycler.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
mainPresenterIml.doData();
x_recycler.refreshComplete();
x_recycler.loadMoreComplete();
}
@Override
public void onLoadMore() {
mainPresenterIml.doData();
x_recycler.refreshComplete();
x_recycler.loadMoreComplete();
}
});
}
@Override
public void success(String data) {
//获取到数据进行解析
NewsData newsData = new Gson().fromJson(data, NewsData.class);
ArrayList<Data> list = newsData.getData();
//创建适配器
//MyAdapter adapter=new MyAdapter(MainActivity.this,list);
MoreAdapter adapter=new MoreAdapter(MainActivity.this,list);
x_recycler.setAdapter(adapter);
}
@Override
public void fail() {
}
@Override
protected void onDestroy() {
super.onDestroy();
mainPresenterIml.destroy();
}
}
MoreAdapter(多条目)
package com.bawei.week01_3.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.bawei.week01_3.R;
import com.bawei.week01_3.bean.Data;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
/**
* @Author:
* @E-mail:
* @Date:
* @Description:描述信息
*/
public class MoreAdapter extends RecyclerView.Adapter {
private Context context;
private ArrayList<Data> list=new ArrayList<>();
public MoreAdapter(Context context, ArrayList<Data> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
RecyclerView.ViewHolder viewHolder=null;
switch (i){
case 0:
View view = View.inflate(context, R.layout.item, null);
viewHolder = new ViewHolder01(view);
break;
case 1:
View view1 = View.inflate(context, R.layout.item2, null);
viewHolder = new ViewHolder01(view1);
break;
case 2:
View view2 = View.inflate(context, R.layout.item3, null);
viewHolder = new ViewHolder01(view2);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
if (viewHolder instanceof ViewHolder01){
((ViewHolder01) viewHolder).bookname.setText(list.get(i).getBookname());
((ViewHolder01) viewHolder).book_info.setText(list.get(i).getBook_info());
Glide.with(context).load(list.get(i).getBook_cover()).into(((ViewHolder01) viewHolder).book_cover);
}else if (viewHolder instanceof ViewHolder02){
((ViewHolder02) viewHolder).bookname.setText(list.get(i).getBookname());
((ViewHolder02) viewHolder).book_info.setText(list.get(i).getBook_info());
Glide.with(context).load(list.get(i).getBook_cover()).into(((ViewHolder02) viewHolder).book_cover);
}else if(viewHolder instanceof ViewHolder03){
((ViewHolder03) viewHolder).bookname.setText(list.get(i).getBookname());
((ViewHolder03) viewHolder).book_info.setText(list.get(i).getBook_info());
Glide.with(context).load(list.get(i).getBook_cover()).into(((ViewHolder03) viewHolder).book_cover);
}
}
@Override
public int getItemCount() {
return list.size();
}
@Override
public int getItemViewType(int position) {
return position%3;
}
class ViewHolder01 extends RecyclerView.ViewHolder{
private ImageView book_cover;
private TextView bookname,book_info;
public ViewHolder01(@NonNull View itemView) {
super(itemView);
book_cover =(ImageView) itemView.findViewById(R.id.book_cover);
bookname =(TextView)itemView.findViewById(R.id.bookname);
book_info =(TextView)itemView.findViewById(R.id.book_info);
}
}
class ViewHolder02 extends RecyclerView.ViewHolder{
private ImageView book_cover;
private TextView bookname,book_info;
public ViewHolder02(@NonNull View itemView) {
super(itemView);
book_cover =(ImageView) itemView.findViewById(R.id.book_cover);
bookname =(TextView)itemView.findViewById(R.id.bookname);
book_info =(TextView)itemView.findViewById(R.id.book_info);
}
}
class ViewHolder03 extends RecyclerView.ViewHolder{
private ImageView book_cover;
private TextView bookname,book_info;
public ViewHolder03(@NonNull View itemView) {
super(itemView);
book_cover =(ImageView) itemView.findViewById(R.id.book_cover);
bookname =(TextView)itemView.findViewById(R.id.bookname);
book_info =(TextView)itemView.findViewById(R.id.book_info);
}
}
}
MyAdapter(单条目)
package com.bawei.week01_3.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.bawei.week01_3.R;
import com.bawei.week01_3.bean.Data;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
/**
* @Author:
* @E-mail:
* @Date:
* @Description:描述信息
*/
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private Context context;
private ArrayList<Data> list=new ArrayList<>();
public MyAdapter(Context context, ArrayList<Data> list) {
this.context = context;
this.list = list;
}
@NonNull
@Override
public MyAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = View.inflate(context, R.layout.item, null);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull MyAdapter.ViewHolder viewHolder, int i) {
viewHolder.bookname.setText(list.get(i).getBookname());
viewHolder.book_info.setText(list.get(i).getBook_info());
Glide.with(context).load(list.get(i).getBook_cover()).into(viewHolder.book_cover);
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private ImageView book_cover;
private TextView bookname,book_info;
public ViewHolder(@NonNull View itemView) {
super(itemView);
book_cover =(ImageView) itemView.findViewById(R.id.book_cover);
bookname =(TextView)itemView.findViewById(R.id.bookname);
book_info =(TextView)itemView.findViewById(R.id.book_info);
}
}
}