https://github.com/YangJun1208/okHttp
依赖
implementation ‘com.squareup.okhttp3:okhttp:3.11.0’
implementation ‘com.squareup.okhttp3:logging-interceptor:3.11.0’
OkHttp
自定义拦截器
public class MyInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
log.I("TAG","1111111");
return chain.proceed(request);
}
}
接口
public interface ICallBack {
void onsuccess(Object obj);
void onfail(Exception e);
}
okhttpUtils
public class OkHttpUtils {
private static volatile OkHttpUtils mInstance;
private OkHttpClient mClient;
private Handler mHandler =new Handler(Looper.getMainLooper());
public static OkHttpUtils getmInstance(){
if(mInstance==null){
synchronized (OkHttpUtils.class){
mInstance=new OkHttpUtils();
}
}
return mInstance;
}
private OkHttpUtils(){
// HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
// interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
mClient = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
// .addInterceptor(interceptor)
.addInterceptor(new MyInterceptor())
.build();
}
public String getExecute(String url, final ICallBack callBack, final Class clazz) throws IOException {
Request request = new Request.Builder()
.get()
.url(url)
.build();
Call call = mClient.newCall(request);
Response response = call.execute();
return byte2String(response.body().bytes());
}
//get请求
/*public void getEnqueue(final String url, final ICallBack callBack, final Class clazz) {
Request request = new Request.Builder()
.get()
.url(url)
.build();
Call call = mClient.newCall(request);
call.enqueue(new Callback() {
//网络请求连接失败
@Override
public void onFailure(Call call, final IOException e) {
mHandler.post(new Runnable() {
@Override
public void run() {
callBack.onfail(e);
}
});
}
//网络请求连接成功
@Override
public void onResponse(Call call, Response response) throws IOException {
String result = response.body().string();
Gson gson = new Gson();
final Object o = gson.fromJson(result, clazz);
mHandler.post(new Runnable() {
@Override
public void run() {
callBack.onsuccess(o);
}
});
}
});
}*/
//post请求
public void postEnqueue(final String url, Map<String, String> params, final Class clazz, final ICallBack callBack) {
FormBody.Builder builder = new FormBody.Builder();
for (Map.Entry<String, String> entry : params.entrySet()) {
builder.add(entry.getKey(), entry.getValue());
}
RequestBody body = builder.build();
Request request = new Request.Builder()
.post(body)
.url(url)
.build();
Call call = mClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
mHandler.post(new Runnable() {
@Override
public void run() {
callBack.onfail(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String result = response.body().string();
Gson gson = new Gson();
final Object o = gson.fromJson(result, clazz);
mHandler.post(new Runnable() {
@Override
public void run() {
callBack.onsuccess(o);
}
});
}
});
}
private static String byte2String(byte[] bytes) {
return new String(bytes);
}
Persenter
public interface Ipersener {
//void getRequest(String dataUrl,Class clazz);
void getRequest(String dataUrl, Map<String, String> map, Class clazz);
}
persenter的实现类
public class IPersenterImpl implements Ipersener {
private IModelImpl iModel;
private IView iView;
public IPersenterImpl(IView mIView){
iView=mIView;
iModel=new IModelImpl();
}
/*@Override
public void getRequest(String dataUrl, Class clazz) {
iModel.getRequest(dataUrl, clazz, new MyCallBack() {
@Override
public void onSuccess(Object data) {
iView.onSuccess(data);
}
});
}*/
public void deteach(){
iModel=null;
iView=null;
}
@Override
public void getRequest(String dataUrl, Map<String, String> map, Class clazz) {
iModel.getRequest(dataUrl, map, clazz, new MyCallBack() {
@Override
public void onSuccess(Object data) {
iView.onSuccess(data);
}
});
}
Model
public interface IModel{
//get
//void getRequest(String dataUrl, Class clazz, MyCallBack callBack);
//post
void getRequest(String url, Map<String, String> params, Class clazz, MyCallBack callBack);
}
model的实现类
public class IModelImpl implements IModel {
//post
@Override
public void getRequest(String url, Map<String, String> params, Class clazz, final MyCallBack callBack) {
OkHttpUtils.getmInstance().postEnqueue(url, params, clazz, new ICallBack() {
@Override
public void onsuccess(Object obj) {
callBack.onSuccess(obj);
}
@Override
public void onfail(Exception e) {
callBack.onSuccess(e.getMessage());
}
});
}
// @Override
// public void getRequest(String dataUrl, final Class clazz, final MyCallBack callBack) {
//get请求
/*OkHttpUtils.getmInstance().getEnqueue(dataUrl,new ICallBack() {
@Override
public void onsuccess(Object obj) {
callBack.onSuccess(obj);
}
@Override
public void onfail(Exception e) {
callBack.onSuccess(e.getMessage());
}
},clazz);*/
接口的路径
public class Apis {
// public static final String URL_LOGIN="http://www.zhaoapi.cn/user/login?mobile=%s&password=%s";
// public static final String URL_ZHUCE="http://www.zhaoapi.cn/user/reg?mobile=%s&password=%s";
public static final String URL_LOGIN_IMG="http://www.zhaoapi.cn/home/getHome";
public static final String URL_LOGIN="http://www.zhaoapi.cn/user/login";
public static final String URL_ZHUCE="http://www.zhaoapi.cn/user/reg";
}
MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener,IView {
private Button button_deng;
private EditText edit_phone,edit_pwd;
private TextView text_zhuce;
private ImageView image_QQ;
private IPersenterImpl iPersenter;
//private String dataUrl="";
private final int TYPE_LOGIN=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button_deng=findViewById(R.id.button_deng);
edit_phone=findViewById(R.id.edit_phone);
edit_pwd=findViewById(R.id.edit_pwd);
text_zhuce=findViewById(R.id.zhuce);
image_QQ=findViewById(R.id.QQ);
iPersenter=new IPersenterImpl(this);
text_zhuce.setOnClickListener(this);
button_deng.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.zhuce:
Intent intent = new Intent(MainActivity.this, ZhuCeActivity.class);
startActivity(intent);
break;
case R.id.button_deng:
Map<String, String> params = new HashMap<>();
String phone = edit_phone.getText().toString();
String pwd = edit_pwd.getText().toString();
params.put("mobile",phone);
params.put("password",pwd);
iPersenter.getRequest(Apis.URL_LOGIN,params,DengBean.class);
break;
}
}
@Override
public void onSuccess(Object data) {
if(data instanceof DengBean){
DengBean dengBean= (DengBean) data;
if(dengBean.getCode().equals("0")){
Intent intent = new Intent(MainActivity.this, LoginActivity.class);
startActivity(intent);
}
}
}