您的位置:首页 > 移动开发 > Android开发

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

2017-07-26 14:55 281 查看
对于接口回调机制首先要弄明白的问题是为什么需要它,也就是接口回调能为我们解决什么问题:

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

这个时候就能体现出各种接口也就是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);

}

这也就是回调的核心问题,你在需要的地方用接口执行方法,而此时实现接口的类会同时接收到参数并且执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 界面 callback