java 接口回調(diào)實(shí)例詳解
java 接口回調(diào)實(shí)例詳解
首先官方對(duì)接口回調(diào)的定義是這樣的,所謂回調(diào):就是A類(lèi)中調(diào)用B類(lèi)中的某個(gè)方法C,然后B類(lèi)中反過(guò)來(lái)調(diào)用A類(lèi)中的方法D,D這個(gè)方法就叫回調(diào)方法。這樣聽(tīng)起來(lái)有點(diǎn)繞,我們可以這么理解接口回調(diào):比如我們想知道隔壁老王啥時(shí)候回家?但是我們有自己的事情做不能一直監(jiān)視著老王,那么我們可以雇員小區(qū)的保安來(lái)完成這個(gè)任務(wù),當(dāng)老王回家口,保安就給我們打電話告訴我們,老王回來(lái)了!這樣就完成了一個(gè)事件的傳遞;
首先我們定義了一個(gè)接口:
public interface DynamicMessageListener {
/**
* 獲取網(wǎng)絡(luò)數(shù)據(jù),
* @param bean bean 對(duì)象
*/
void getDynamicData(List<DynamicBean.DataBean> bean, boolean isMore);
}
定義一個(gè)類(lèi)實(shí)現(xiàn)這個(gè)接口:
public class DynamicFragment extends Fragment implements DynamicMessageListener {
//初始化監(jiān)聽(tīng)者
private DynamicMessageListener listener;
/**
* 獲取網(wǎng)絡(luò)數(shù)據(jù)
*
* @param bean bean 對(duì)象
*/
@Override
public void getDynamicData(List<DynamicBean.DataBean> bean, boolean isMore) {
if (bean != null && bean.size() > 0) {
if (!isMore) {
adapter = new DynamicAdapter(mContext, bean, this, classID);
friendLv.setAdapter(adapter);
adapter.setListener(this);
LLog.e("activity------有數(shù)據(jù)");
} else {
adapter.setData(bean);
}
}
}
}
在網(wǎng)絡(luò)請(qǐng)求層調(diào)用上面的方法:
public class DynamicModel extends BaseModel {
private Context mContext;
private NetUtils net;
private DynamicMessageListener listener;
public DynamicModel(Context mContext, DynamicMessageListener listener) {
this.mContext = mContext;
net = NetUtils.getInstance();
this.listener = listener;
}
/**
* 加載網(wǎng)絡(luò)數(shù)據(jù),
* @param url 網(wǎng)絡(luò)url
* @param params 請(qǐng)求網(wǎng)絡(luò)攜帶的參數(shù)
*/
public void loadData(String url, RequestParams params) {
net.sendGetRequest(url, params, new NetUtils.NetUtilsCallBack() {
@Override
public void getNetdata(String json) {
if (json != null) {
Gson gson = new Gson();
DynamicBean bean = gson.fromJson(json, DynamicBean.class);
List<DynamicBean.DataBean> data = bean.getData();
listener.getDynamicData(data, false);
if(data ==null||data.size() <=0 ){
listener.friendsNoData(false);
LLog.e("沒(méi)有數(shù)據(jù)-----");
}
}
}
@Override
public void loadError(int a) {
showError(a, mContext);
}
});
}
}
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
springboot 在idea中實(shí)現(xiàn)熱部署的方法
這篇文章主要介紹了springboot 在idea中實(shí)現(xiàn)熱部署的方法,實(shí)現(xiàn)了熱部署,在每一次作了修改之后,都會(huì)自動(dòng)的重啟,非常節(jié)約時(shí)間,感興趣的小伙伴們可以參考一下2018-10-10
Java基礎(chǔ)夯實(shí)之線程問(wèn)題全面解析
操作系統(tǒng)支持多個(gè)應(yīng)用程序并發(fā)執(zhí)行,每個(gè)應(yīng)用程序至少對(duì)應(yīng)一個(gè)進(jìn)程?。進(jìn)程是資源分配的最小單位,而線程是CPU調(diào)度的最小單位。本文將帶大家全面解析線程相關(guān)問(wèn)題,感興趣的可以了解一下2022-11-11
SpringBoot整合jnotify實(shí)現(xiàn)針對(duì)指定目錄及其(動(dòng)態(tài))子目錄的監(jiān)聽(tīng)的方法
本文介紹了JNotify這一Java庫(kù)在SpringBoot中的應(yīng)用,JNotify允許應(yīng)用程序監(jiān)聽(tīng)文件系統(tǒng)事件,包括文件夾/文件的創(chuàng)建、刪除、修改和重命名,由于JNotify底層調(diào)用的關(guān)鍵部分是C語(yǔ)言開(kāi)發(fā)的,所以在使用前需要在系統(tǒng)中加入相應(yīng)的動(dòng)態(tài)庫(kù)2024-10-10
基于Zookeeper實(shí)現(xiàn)服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)功能
無(wú)論是采用SOA還是微服務(wù)架構(gòu),都需要使用服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)組件,本文將基于 Zookeeper 實(shí)現(xiàn)服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)功能,如果跟我一樣有同樣的困惑,希望可以通過(guò)本文了解其他組件如何使用 Zookeeper 作為注冊(cè)中心的工作原理2023-09-09

