在java和android开发过程中经常会使用到回调函数,一直对回调函数不是很理解,今天自己写了个例子,是为了客户端像服务器发送请求,要知道请求是否发送成功而写的。当你发送一个请求到服务器时,成功发送请求就调用成功的接口,发送请求就调用失败的接口,这些都由服务器进行处理,客户端只需知道成功与否问题。概念的东西就不多说了,直接上代码了。
1、创建回调接口
复制内容到剪贴板
代码:
package pattern;
/**
*
* @author xuzhiwei
*/
public interface ICallBack {
public void onSuccess(String content);
public void onFailure(String errorMsg);
}
2、创建调用http请求的类,用于向服务器发送请求,服务器内部进行http请求处理的功能。
复制内容到剪贴板
代码:
package pattern;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author xuzhiwei
*/
public abstract class Request {
public void onSuccess(String resposeBody){}
public void onFailure(String exceptionMsg){}
public Request(){}
public void execute(String path){
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setConnectTimeout(3*1000);
conn.setReadTimeout(2000);
int responseCode = conn.getResponseCode();
onResponse(responseCode);
} catch (MalformedURLException ex) {
onFailure(ex.getMessage());
} catch (IOException ex) {
onFailure(ex.getMessage());
}
}
public void onResponse(int code){
if(code == 200){
onSuccess("发送请求成功!");
}else{
onFailure("发送请求失败!请求代码:"+code);
}
}
}
3、创建请求控制类
复制内容到剪贴板
代码:
package pattern;
/**
*
* @author xuzhiwei
*/
public class Ranking {
private String path;
public Ranking(String path){
this.path = path;
}
public void list(final ICallBack call) {
Request request = new Request() {
@Override
public void onSuccess(String resposeBody) {
if (null != call) {
call.onSuccess(resposeBody);
} else {
onFailure("未初始化回调函数");
}
}
@Override
public void onFailure(String exceptionMsg) {
if (null != call) {
call.onFailure(exceptionMsg);
}
}
};
request.execute(path);
}
}
4、创建测试类进行测试
复制内容到剪贴板
代码:
package pattern;
/**
*
* @author xuzhiwei
*/
public class TestCallBack {
public static void main(String[] args) {
Ranking ranking = new Ranking("http://localhost/net/index.php");
ranking.list(new ICallBack() {
@Override
public void onSuccess(String content) {
complete(content);
}
@Override
public void onFailure(String errorMsg) {
complete(errorMsg);
}
});
}
private static void complete(String msg)
{
System.out.println("------请求完成---->"+msg);
}
}
以上就是整个回调函数的处理过程了。
转自:http://bbs.51cto.com/thread-967997-1.html