android 回调
来源:互联网 发布:软件委托开发保密协议 编辑:程序博客网 时间:2024/05/18 02:06
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。
二、经典的例子:
经理、员工。经理要出差,出差期间有件事情需要员工完成并要知道事情的进度和结果。所以必须有一个callback的方法告诉result。
三、下面是button的回调例子
a、定义接口
public interface OnClickListener {
public void OnClick(Button b);
b. 定义Button
public class Button {
OnClickListener listener;
public void click() {
listener.OnClick(this);
}
public void setOnClickListener(OnClickListener listener) {
this.listener = listener;
}
}
c. 将接口对象OnClickListener 赋给 Button的接口成员
public class Activity {
public Activity() {
}
public static void main(String[] args) {
Button button = new Button();
button.setOnClickListener(new OnClickListener(){
@Override
public void OnClick(Button b) {
System.out.println("clicked");
}
});
button.click(); //user click,System call button.click();
}
}
- /**
- * 这是一个回调接口
- * @author xiaanming
- *
- */
- public interface CallBack {
- /**
- * 这个是小李知道答案时要调用的函数告诉小王,也就是回调函数
- * @param result 是答案
- */
- public void solve(String result);
- }
- /**
- * 这个是小王
- * @author xiaanming
- * 实现了一个回调接口CallBack,相当于----->背景一
- */
- public class Wang implements CallBack {
- /**
- * 小李对象的引用
- * 相当于----->背景二
- */
- private Li li;
- /**
- * 小王的构造方法,持有小李的引用
- * @param li
- */
- public Wang(Li li){
- this.li = li;
- }
- /**
- * 小王通过这个方法去问小李的问题
- * @param question 就是小王要问的问题,1 + 1 = ?
- */
- public void askQuestion(final String question){
- //这里用一个线程就是异步,
- new Thread(new Runnable() {
- @Override
- public void run() {
- /**
- * 小王调用小李中的方法,在这里注册回调接口
- * 这就相当于A类调用B的方法C
- */
- li.executeMessage(Wang.this, question);
- }
- }).start();
- //小网问完问题挂掉电话就去干其他的事情了,诳街去了
- play();
- }
- public void play(){
- System.out.println("我要逛街去了");
- }
- /**
- * 小李知道答案后调用此方法告诉小王,就是所谓的小王的回调方法
- */
- @Override
- public void solve(String result) {
- System.out.println("小李告诉小王的答案是--->" + result);
- }
- }
- /**
- * 这个就是小李啦
- * @author xiaanming
- *
- */
- public class Li {
- /**
- * 相当于B类有参数为CallBack callBack的f()---->背景三
- * @param callBack
- * @param question 小王问的问题
- */
- public void executeMessage(CallBack callBack, String question){
- System.out.println("小王问的问题--->" + question);
- //模拟小李办自己的事情需要很长时间
- for(int i=0; i<10000;i++){
- }
- /**
- * 小李办完自己的事情之后想到了答案是2
- */
- String result = "答案是2";
- /**
- * 于是就打电话告诉小王,调用小王中的方法
- * 这就相当于B类反过来调用A的方法D
- */
- callBack.solve(result);
- }
- }
记录:
接口
set
implements
一, 编写抽象类
public abstract class HttpCallbacks<E> {
/**
* 获取数据成功
*
* @param data
* String类型的结果
*/
public void onSuccess(String data) {
};
/**
* 获取数据成功
*
* @param data
* List类型的结果
*/
public void onSuccess(List<E> data) {
};
/**
* 获取数据失败
*
* @param errorCode
* 错误信息代码
* @param errorMsg
* 错误信息数据
*/
public void onError(int errorCode, String errorMsg) {
};
}
二,作为参数回调
public void getUser(HttpParams params,final HttpCallbacks<String> callback){
if (NetWorkUtils.getNetworkType(DemoApplication.getInstance()) == -1) {
callback.onError(HttpClientHelper.DATA_FAIL_ERROR,
HttpClientHelper.DATA_NET_ERROR);
return;
}
//请求网络
HttpClientHelper.post2("url", params, new HttpCallBack() {
@Override
public void onSuccess(String t) {
// TODO Auto-generated method stub
super.onSuccess(t);
}
@Override
public void onFailure(int errorNo, String strMsg) {
// TODO Auto-generated method stub
super.onFailure(errorNo, strMsg);
callback.onError(errorNo, strMsg);
}
});
}
三,调用参数,实现抽象方法
RegisterMannger.getManager().getAuthcode(params,
new HttpCallbacks<String>() {
@Override
public void onSuccess(String data) {
super.onSuccess(data);
mServerCode = data;
mSubmitState = false;
}
@Override
public void onError(int errorCode, String errorMsg) {
super.onError(errorCode, errorMsg);
mDownTimer.cancel();
mDownTimer.onFinish();
mCodeBtn.setClickable(true);
mSubmitState = false;
ToastUtils.show(getActivity(), "" + errorMsg);
}
});
简单实现
package cn.testcallback;
import android.os.Bundle;
import android.widget.Toast;
import android.app.Activity;
/**
* Demo描述:
* Android中回调接口的使用
*/
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
init();
}
private void init() {
for (int i = 0; i < 10000; i++) {
if (i == 9527) {
showToast(i, new CallBackInterface() {
@Override
public void callBackFunction(int i) {
Toast.makeText(MainActivity.this, "我的编号:"+i, Toast.LENGTH_LONG).show();
}
});
}
}
}
//定义函数,其中一个参数为CallBackInterface类型
private void showToast(int i, CallBackInterface callBackInterface) {
callBackInterface.callBackFunction(i);
}
//定义接口.且在接口中定义一个方法
public interface CallBackInterface {
public void callBackFunction(int i);
}
}
- android 回调
- Android回调
- Android 回调
- Android回调
- android回调
- Android回调
- android 回调
- android 回调
- Android 回调
- Android 回调
- Android回调——Android模块化编程
- Android调用JS && JS回调Android原生
- Android JNI回调
- android Fragment onActivityResult回调
- Android 模拟Button 回调
- 浅谈android回调
- Java/Android回调
- Android
- event对象在IE和firefox详解
- window.linux下远程调试java项目
- 安卓 NumberPicker使用说明以及实例:星座判断
- tomcat 二级域名的处理
- C++开发者都应该使用的10个C++11特性
- android 回调
- tomcat创建虚拟内存
- 利用Medusa在线暴力破解远程服务
- linux下安装java并设置环境变量
- 没有数据线,Wifi也能连接Android真机开发调试!彻底解决“无法识别的USB设备”等数据线连接问题!
- zoj 1067 Color Me Less
- php本地环境搭建教程
- 搭建monkeyrunner测试环境
- Java 数字格式化