1. 程式人生 > >對於Android中介面回撥機制的理解

對於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);
}

這也就是回撥的核心問題,你在需要的地方用介面執行方法,而此時實現介面的類會同時接收到引數並且執行。