对于Android中接口回调机制的理解

对于接口回调机制首先要弄明白的问题是为什么需要它,也就是接口回调能为我们解决什么问题:

在开发过程中我们经常会遇到一些有关触发执行的问题,比如用户触发按钮,然后程序就执行了一系列的操作的比如注册登录啊;问题的核心在于为什么是出发了按钮才执行,不触发就不执行吗?

这个时候就能体现出各种接口也就是Listener或者callback等等的作用来了:首先分析一下接口的成分,

public interface OnMainActivityListener {
    void onSuccess(Obj data);

    void onError();

    void setOnTrueClick(boolean setClick);

    void setOnFalseClick(boolean setClick);

}

接口里面就是你需要获得参数执行操作的方法,在接口中接收的参数类型是你自己定义的,所以你写的类要实现这个接口,

public class MainActivity extends BaseActivity implements OnMainActivityListener{
@Override
public void onSuccess(Object data) {
//执行操作

}
。。。。。

}

我实现了接口,也写完了里面需要完成的操作,接着问题又来了,这些方法为什么会执行,在什么时候执行?
首先说说什么时候执行,这就要看你的需要了,比如你去网络请求一些数据,数据成功返回后,你需要在onSuccess(Object data)中拿到参数再去执行,所以你就需要在请求网络成功后去执行listener.onSuccess(Object data)这个方法,比如以下:
public void getNetData(final String url) {
Runnable runnable = new Runnable() {
@Override
public void run() {
OkGo.post(url).tag(this).execute(new StringCallback() {
@Override
public void onSuccess(String result, Call call, Response response) {
if (result != null) {
try {
JSONObject json = new JSONObject(result);
if (json != null) {
int code = (int) json.get(“CODE”);
if (code == Constant.SUCCEED_USER_NO) {
ToastUtil.showLongToast(“用户未登录”);
return;
} else if (code == Constant.SUCCEED_CODE) {
CaseDetailBean caseDetailBean = GsonUtil.parseJsonToBean(result, CaseDetailBean.class);
CaseDetailBean.DATABean data = caseDetailBean.getDATA();
listener.onSuccess(data);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
});
}
};
ThreadUtils.runOnSubMoreThread(runnable);
}

这也就是回调的核心问题,你在需要的地方用接口执行方法,而此时实现接口的类会同时接收到参数并且执行。

猜你喜欢

转载自blog.csdn.net/qq_15131627/article/details/76146999