最近发现涂鸦的api,都是用的callback回调,我就研究了一下,以后我的代码也可以像这样用这个玩意儿封装一下,不得不说,经历过项目之后这个callback发现还挺好用
文章最后有我封装好了okhttp请求,有需要可以直接拿去用
之前有写过类似的
安卓:当中两个activity的监听回调事件_谢桥的博客-CSDN博客
直接上源码吧
RequestCallback.java
/**
* interface接口
*/
public interface RequestCallback {
void success();
void error(String error);
}
RequestListenerUser.java
/**
* 接口使用
*/
public class RequestListenerUser {
private RequestCallback requestListener;
public void setRequestListener(RequestCallback requestListener) {
this.requestListener = requestListener;
}
public void useRequestListener(String str) {
requestListener.success();
requestListener.error("String error "+str);
}
}
viewmodel或者activity当中调用
requestListenerUser = new RequestListenerUser();
requestListenerUser.setRequestListener(new RequestCallback() {
@Override
public void success() {
Log.e("phone","success");
}
@Override
public void error(String error) {
Log.e("phone",error);
}
});
requestListenerUser.useRequestListener("sherry");
private RequestListenerUser requestListenerUser;
打印结果如下
E/phone: 183
E/phone: success
E/phone: String errorsherry
如果说,我想吧参数写到 setRequestListener当中呢
那就这样改
public void setRequestListener(String str,RequestCallback requestListener) {
this.requestListener = requestListener;
useRequestListener(str);
}
public void useRequestListener(String str) {
//这里面执行操作
request(str);
}
再这样调用就可以了
String h = "http://www.nufe.cc:8000/api/all_lessons_title";
requestListenerUser = new RequestListenerUser();
//requestListenerUser.useRequestListener("http://www.nufe.cc:8000/api/all_lessons_title");
requestListenerUser.setRequestListener(h,new RequestCallback() {
@Override
public void success(String result) {
Log.e("phone",result);
}
@Override
public void error(String error) {
Log.e("phone",error);
}
});
下面的实际案例当中,这一点我也会演示出来
实际使用的重头戏来啦
具体需求,各位小伙伴根据自己业务再修改
RequestCallback.java
/**
* interface接口
*/
public interface RequestCallback {
void success(String str);
void error(String error);
}
主要看一下这里,我加了成功的返回值
RequestListenerUser.java
/**
* 接口使用
*/
public class RequestListenerUser {
private RequestCallback requestListener;
public void setRequestListener(String str,RequestCallback requestListener) {
this.requestListener = requestListener;
useRequestListener(str);
}
public void useRequestListener(String str) {
//这里面执行操作
request(str);
}
private void request(String Url) {
OkHttpClient client = new OkHttpClient();
final Request request = new Request
.Builder()
.url(Url)//要访问的链接
.build();
Call call = client.newCall(request);
call.enqueue(new okhttp3.Callback() {
@Override
public void onFailure(Call call, IOException e) {
requestListener.error(e.getMessage());
}
@Override
public void onResponse(Call call, okhttp3.Response response) throws IOException {
String result = response.body().string();
requestListener.success(result);
}
});
}
}
调用
viewmodel或者activity当中调用
String h = "http://www.nufe.cc:8000/api/all_lessons_title";
requestListenerUser = new RequestListenerUser();
//requestListenerUser.useRequestListener("http://www.nufe.cc:8000/api/all_lessons_title");
requestListenerUser.setRequestListener(h,new RequestCallback() {
@Override
public void success(String result) {
Log.e("phone",result);
}
@Override
public void error(String error) {
Log.e("phone",error);
}
});
private RequestListenerUser requestListenerUser;
phone: 1
E/phone: {'nc_subject': '国际金融(301624301)'}