//MianModel
package com.bawei.mmm.model;
import com.bawei.mmm.bean.ListBean;
public interface MainModel {
void SuccessCallback(ListBean mbean,int page);
void FailerCallback(int code);
}
//MianModelimpl
package com.bawei.mmm.model;
import android.util.Log;
import com.bawei.mmm.bean.ListBean;
import com.bawei.mmm.untils.OkHttp3Utils;
import com.google.gson.Gson;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class MainModelImpl {
private String api="https://www.apiopen.top/meituApi?page=";
private ListBean listBean;
public void getdata(final MainModel mainModelListener, final int page) {
OkHttp3Utils.doget(api, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
mainModelListener.FailerCallback(1);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
Log.i("qqq", "onResponse: "+string);
Gson gson = new Gson();
listBean = gson.fromJson(string, ListBean.class);
mainModelListener.SuccessCallback(listBean,page);
}
});
}
}
//MainView
package com.bawei.mmm.view;
import com.bawei.mmm.bean.ListBean;
public interface MainView {
void SuccessCallback(ListBean vbean);
void FailerCallback(int code);
}
//MianPersenter
package com.bawei.mmm.presenter;
public interface MainPresenter {
void ondestroys();
}
//mianPersenterImpl
package com.bawei.mmm.presenter;
import android.util.Log;
import com.bawei.mmm.bean.ListBean;
import com.bawei.mmm.model.MainModel;
import com.bawei.mmm.model.MainModelImpl;
import com.bawei.mmm.view.MainView;
public class MainPresenterImpl implements MainPresenter{
private MainView mainView;
private MainModelImpl mainModelImpl;
public MainPresenterImpl(MainView mainView) {
this.mainView = mainView;
this.mainModelImpl = new MainModelImpl();
}
public void getdata(int page) {
mainModelImpl.getdata(new MainModel() {
@Override
public void SuccessCallback(ListBean mbean,int page) {
mainView.SuccessCallback(mbean);
}
@Override
public void FailerCallback(int code) {
mainView.FailerCallback(code);
}
},page);
}
@Override
public void ondestroys() {
if (mainView!=null) {
mainView=null;
}
}
}
//OKHttp3
package com.bawei.mmm.untils;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
import android.util.Log;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.Cache;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
public class OkHttp3Utils {
private static OkHttpClient client = null;
public OkHttp3Utils() {
}
//单列模式(懒汉)初始化okhttp
public static OkHttpClient getInstance() {
if (client == null) {
synchronized (OkHttp3Utils.class) {
if (client == null)
client = new OkHttpClient();
}
}
return client;
}
/*
* doget同步请求方法
* url 请求链接
* 通过callback获取结果
* */
public static void dogetex(String url){
Request request = new Request.Builder()
.url(url)
.build();
Call call = getInstance().newCall(request);
try {
call.execute();
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* doget异步请求方法
* url 请求链接
* 通过callback获取结果
* */
public static void doget(String url, Callback callback){
Request request = new Request.Builder()
.url(url)
.build();
Call call = getInstance().newCall(request);
call.enqueue(callback);
}
/*
* dopost 方法
* url
* map
* */
public static void dopost(String url, Map<String,String> map, Callback callback){
FormBody.Builder builder=new FormBody.Builder();
for (String key : map.keySet()) {
builder.add(key, map.get(key));
}
Request request = new Request.Builder()
.url(url)
.post(builder.build())
.build();
Call call = getInstance().newCall(request);
call.enqueue(callback);
}
/*
* dopost 方法
* url
* json
* */
public static void dopostjson(String url, String json, Callback callback){
RequestBody body= RequestBody.create(MediaType.parse("application/json; charset=utf-8"),json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Call call = getInstance().newCall(request);
call.enqueue(callback);
}
//拦截器
class MyIntercepter implements Interceptor {
//intercept 拦截
@Override
public Response intercept(Chain chain) throws IOException {
//添加公共参数
// post 取出原来所有的参数,将之加到新的请求体里面。然后让请求去执行
Request request = chain.request();
//获取请求方法
String method = request.method();
if (method.equals("GET")) {//---------------------------GET 拦截
//取出url地址
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")) {//---------------------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;
}
}
}
//MianAdapter
package com.bawei.mmm.adapter;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bawei.mmm.R;
import com.bawei.mmm.bean.ListBean;
import com.bumptech.glide.Glide;
import java.util.List;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.TextHolder>{
private Context context;
private List<ListBean.DataBean> dataBeans;
public MyAdapter(Context context, List<ListBean.DataBean> dataBeans) {
this.context = context;
this.dataBeans = dataBeans;
}
@NonNull
@Override
public TextHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//鑾峰彇瀛愬竷灞€
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(R.layout.item_layout, parent, false);
return new TextHolder(view);
}
@Override
public void onBindViewHolder(TextHolder holder, int position) {
holder.text_view.setText(dataBeans.get(position).getType());
String url = dataBeans.get(position).getUrl();
Glide.with(context).load(url).into(holder.image_view);
}
@Override
public int getItemCount() {
return dataBeans.size();
}
//textholder
public static class TextHolder extends RecyclerView.ViewHolder{
public TextView text_view;
public ImageView image_view;
public Context context;
public TextHolder(View itemView) {
super(itemView);
image_view = itemView.findViewById(R.id.image_view);
text_view = itemView.findViewById(R.id.text_view);
}
}
}
//MianActivity
package com.bawei.mmm;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.ScrollView;
import com.bawei.mmm.adapter.MyAdapter;
import com.bawei.mmm.bean.ListBean;
import com.bawei.mmm.presenter.MainPresenter;
import com.bawei.mmm.presenter.MainPresenterImpl;
import com.bawei.mmm.view.MainView;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshScrollView;
import java.util.List;
public class MainActivity extends AppCompatActivity implements MainView {
private RecyclerView recycle_view;
private MainPresenterImpl presenter;
private PullToRefreshScrollView pukk_refush_view;
private int page=1;
private List<ListBean.DataBean> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recycle_view = findViewById(R.id.recycle_view);
pukk_refush_view = findViewById(R.id.pull_refush_view);
//实例化p层
presenter = new MainPresenterImpl(this);
presenter.getdata(page);
pukk_refush_view.setMode(PullToRefreshBase.Mode.BOTH);
//布局管理器
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
recycle_view.setLayoutManager(linearLayoutManager);
pukk_refush_view.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ScrollView> pullToRefreshBase) {
page=1;
presenter.getdata(page);
pukk_refush_view.onRefreshComplete();
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ScrollView> pullToRefreshBase) {
page++;
presenter.getdata(page);
pukk_refush_view.onRefreshComplete();
}
});
// recycle_view.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
}
@Override
public void SuccessCallback(final ListBean vbean) {
data = vbean.getData();
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.e("gg", "SuccessCallback: "+data.toString() );
MyAdapter adapter = new MyAdapter(MainActivity.this,data);
recycle_view.setAdapter(adapter);
pukk_refush_view.onRefreshComplete();
}
});
}
@Override
public void FailerCallback(int code) {
}
}
//布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- app bar -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="130dp"
android:layout_height="35dp"
android:drawableLeft="@drawable/biao"
android:drawableRight="@drawable/jian"
android:gravity="center"
android:singleLine="true"
android:text="北京八维教育中心" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:layout_weight="1"
android:paddingLeft="40dp"
android:paddingRight="40dp">
<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@null"
android:hint="搜索附近的吃喝玩乐"
android:singleLine="true"
android:textSize="13sp" />
</LinearLayout>
<ImageView
android:id="@+id/iv_head"
android:layout_width="50dp"
android:layout_height="50dp"
android:padding="3dp"
/>
</LinearLayout>
<!-- 列表 -->
<com.handmark.pulltorefresh.library.PullToRefreshScrollView android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/pull_refush_view"
xmlns:android="http://schemas.android.com/apk/res/android">
<android.support.v7.widget.RecyclerView
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/recycle_view" />
</com.handmark.pulltorefresh.library.PullToRefreshScrollView>
</LinearLayout>
//依赖
implementation 'com.squareup.okhttp3:okhttp:3.10.0'
implementation 'com.google.code.gson:gson:2.8.2'
implementation 'com.github.bumptech.glide:glide:4.6.1'
annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1'
implementation 'com.github.userswlwork:pull-to-refresh:1.0.0'
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
implementation 'com.github.bumptech.glide:glide:3.7.0'