在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