view层
/**
* @Author:h
* @E-mail: 2973627661@163.com
* @Date:2019/3/17 18:59
* @Description:描述信息
*/
public interface MainView {
void success(String data);
void fail();
}
model层
/**
* @Author:h
* @E-mail: 2973627661@163.com
* @Date:2019/3/17 19:00
* @Description:描述信息
*/
public interface MainModel {
interface CallBackListener{
void success(String data);
void fail();
}
void getData(CallBackListener backListener);
}
model实现层
import com.bwei.exit1.mvp.net.OkHttpUtil;
/**
* @Author:h
* @E-mail: 2973627661@163.com
* @Date:2019/3/17 19:01
* @Description:描述信息
*/
public class MainModelImp implements MainModel {
public String strurl="https://www.apiopen.top/novelApi";
@Override
public void getData(final CallBackListener backListener) {
new OkHttpUtil().get(strurl).result(new OkHttpUtil.OkHttpUtilListener() {
@Override
public void success(String data) {
backListener.success(data);
}
@Override
public void fail() {
backListener.fail();
}
});
}
}
presenter层
/**
* @Author:h
* @E-mail: 2973627661@163.com
* @Date:2019/3/17 19:02
* @Description:描述信息
*/
public interface MainPresenter {
void setData();
}
presenter实现层
import com.bwei.exit1.mvp.model.MainModel;
import com.bwei.exit1.mvp.view.MainView;
/**
* @Author:h
* @E-mail: 2973627661@163.com
* @Date:2019/3/17 19:02
* @Description:描述信息
*/
public class MainPresenterImp implements MainPresenter {
private MainModel mainModel;
private MainView mainView;
public MainPresenterImp(MainModel mainModel, MainView mainView) {
this.mainModel = mainModel;
this.mainView = mainView;
}
@Override
public void setData() {
mainModel.getData(new MainModel.CallBackListener() {
@Override
public void success(String data) {
mainView.success(data);
}
@Override
public void fail() {
mainView.fail();
}
});
}
public void destory() {
if (mainModel!=null){
mainModel=null;
}else if(mainView!=null){
mainView=null;
}
System.gc();
}
}
net网络请求(封装)
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
/**
* @Author:h
* @E-mail: 2973627661@163.com
* @Date:2019/3/17 19:08
* @Description:描述信息
*/
public class OkHttpUtil {
private int HTTP_SUCCESS=10;
private int HTTP_FAIL=1;
public OkHttpUtilListener okHttpUtilListener;
//get请求
public OkHttpUtil get(String url){
doHttp(url,0,null);
return this;
}
//post请求
public OkHttpUtil post(String url,FormBody.Builder bodyBuilder){
doHttp(url,1,bodyBuilder);
return this;
}
public void doHttp(String url, int i,FormBody.Builder bodyBuilder) {
OkHttpClient client=new OkHttpClient.Builder().addInterceptor(new LanJie()).build();
Request.Builder builder = new Request.Builder();
builder.url(url);
if (i==0){
builder.get();
}else{
RequestBody body=bodyBuilder.build();
builder.post(body);
}
Request request = builder.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Message message=Message.obtain();
message.what=HTTP_FAIL;
handler.sendMessage(message);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
Message message=Message.obtain();
message.obj=response.body().string();
message.what=HTTP_SUCCESS;
handler.sendMessage(message);
}
});
}
public Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what==HTTP_SUCCESS){
String data= (String) msg.obj;
okHttpUtilListener.success(data);
}else{
okHttpUtilListener.fail();
}
}
};
public void result(OkHttpUtilListener okHttpUtilListener){
this.okHttpUtilListener=okHttpUtilListener;
}
public interface OkHttpUtilListener{
void success(String data);
void fail();
}
private class LanJie implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request=chain.request();
String method = request.method();
HttpUrl url = request.url();
String host = request.url().host();
Log.i("aaa",method+"---"+url+"---"+host);
return chain.proceed(request);
}
}
}
MainActivity层
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.util.Log;
import com.bwei.exit1.mvp.adapter.MyAdapter;
import com.bwei.exit1.mvp.bean.Data;
import com.bwei.exit1.mvp.bean.User;
import com.bwei.exit1.mvp.model.MainModelImp;
import com.bwei.exit1.mvp.presenter.MainPresenterImp;
import com.bwei.exit1.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 xrecycler_view;
private MainPresenterImp mainPresenterImp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
xrecycler_view = findViewById(R.id.xrecycler_view);
//创建视图管理器
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(MainActivity.this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
xrecycler_view.setLayoutManager(linearLayoutManager);
mainPresenterImp = new MainPresenterImp(new MainModelImp(),this);
mainPresenterImp.setData();
}
@Override
public void success(String data) {
Gson gson = new Gson();
User user = gson.fromJson(data, User.class);
ArrayList<Data> list = user.getData();
Log.i("aaa",list.toString());
//创建适配器
final MyAdapter myAdapter=new MyAdapter(MainActivity.this,list);
xrecycler_view.setAdapter(myAdapter);
xrecycler_view.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
mainPresenterImp.setData();
xrecycler_view.refreshComplete();
}
@Override
public void onLoadMore() {
mainPresenterImp.setData();
xrecycler_view.loadMoreComplete();
}
});
}
@Override
public void fail() {
}
@Override
protected void onDestroy() {
super.onDestroy();
mainPresenterImp.destory();
}
}
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.bumptech.glide.Glide;
import com.bwei.exit1.R;
import com.bwei.exit1.mvp.bean.Data;
import java.util.ArrayList;
/**
* @Author:h
* @E-mail: 2973627661@163.com
* @Date:2019/3/17 20:18
* @Description:描述信息
*/
public class MyAdapter extends RecyclerView.Adapter {
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 RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
RecyclerView.ViewHolder viewHolder=null;
switch (i){
case 0:
View view=View.inflate(context,R.layout.item1,null);
viewHolder = new ViewHolder0(view);
break;
case 1:
View view1=View.inflate(context,R.layout.item2,null);
viewHolder = new ViewHolder1(view1);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
if (viewHolder instanceof ViewHolder0){
((ViewHolder0) viewHolder).bookname.setText(list.get(i).getBookname());
((ViewHolder0) viewHolder).topic.setText(list.get(i).getTopic());
}else if(viewHolder instanceof ViewHolder1){
((ViewHolder1) viewHolder).bookname.setText(list.get(i).getBookname());
Glide.with(context).load(list.get(i).getBook_cover()).into(((ViewHolder1) viewHolder).book_cover);
}
}
@Override
public int getItemCount() {
return list.size();
}
@Override
public int getItemViewType(int position) {
return position%2;
}
//创建容器
class ViewHolder0 extends RecyclerView.ViewHolder {
private TextView bookname;
private TextView topic;
public ViewHolder0(@NonNull View itemView) {
super(itemView);
bookname = itemView.findViewById(R.id.bookname);
topic = itemView.findViewById(R.id.topic);
}
}
class ViewHolder1 extends RecyclerView.ViewHolder {
private TextView bookname;
private ImageView book_cover;
public ViewHolder1(@NonNull View itemView) {
super(itemView);
bookname = itemView.findViewById(R.id.bookname);
book_cover = itemView.findViewById(R.id.book_cover);
}
}
}