隨筆-1  評論-2  文章-0  trackbacks-0
               在java和android開發(fā)過程中經(jīng)常遇到回調(diào)函數(shù),一直對回調(diào)函數(shù)不是很理解,今天自己寫了個例子,是為了客戶端像服務(wù)器發(fā)送請求,要知道請求是否發(fā)送成功而寫的。當(dāng)你發(fā)送一個請求到服務(wù)器時,成功發(fā)送請求就調(diào)用成功的接口,發(fā)送請求就調(diào)用失敗的接口,這些都由服務(wù)器進(jìn)行處理,客戶端只需知道成功與否問題。概念的東西就不多說了,直接上代碼了。

          1、創(chuàng)建回調(diào)接口

           1package pattern;
           2
           3/**
           4 *描述:回調(diào)接口
           5 * @author xuzhiwei
           6 */

           7public interface ICallBack {
           8    public void onSuccess(String content);
           9    public void onFailure(String errorMsg);
          10}

           

          2、創(chuàng)建調(diào)用http請求的類,用于向服務(wù)器發(fā)送請求,服務(wù)器內(nèi)部進(jìn)行http請求處理的功能。
          1package pattern;
          2
          3import java.io.IOException;
          4import java.net.HttpURLConnection;
          5import java.net.MalformedURLException;
          6import java.net.URL;
          7import java.util.logging.Level;
          8import java.util.logging.Logger;
          9
          10/**
          11 *
          12 * @author xuzhiwei
          13 */

          14public abstract class Request {
          15public void onSuccess(String resposeBody){}
          16public void onFailure(String exceptionMsg){}
          17
          18public Request(){}
          19
          20public void execute(String path){
          21try {
          22 URL url = new URL(path);
          23 HttpURLConnection conn = (HttpURLConnection)url.openConnection();
          24
          25 conn.setConnectTimeout(3*1000);
          26 conn.setReadTimeout(2000);
                 //返回請求結(jié)果
          27int responseCode = conn.getResponseCode();
          28 onResponse(responseCode);
          29 }
          catch (MalformedURLException ex) {
          30 onFailure(ex.getMessage());
          31 }
          catch (IOException ex) {
          32 onFailure(ex.getMessage());
          33 }

          34 }

          35/**響應(yīng)處理**/
          36public void onResponse(int code){
          37if(code == 200){  //狀態(tài)碼:200響應(yīng)請求成功!調(diào)用 onSuccess 方法
          38 onSuccess("發(fā)送請求成功!");
          39 }
          else{
          40 onFailure("發(fā)送請求失敗!請求代碼:"+code);
          41 }

          42 }

          43
          44}

          45


          3、創(chuàng)建請求控制類
          package pattern;

          /**
          *
          *
          @author xuzhiwei
          */

          public class Ranking {
          private String path;

          public Ranking(String path){
          this.path = path;
          }

           
          publicvoid list(final ICallBack call) {
            //創(chuàng)建請求實例,請求成功回調(diào)成功方法,反之調(diào)用失敗的接口
          Request request
          = new Request() {
          @Override
          public void onSuccess(String resposeBody) {
          if (null != call) {
          call.onSuccess(resposeBody);
          }
          else {
          onFailure(
          "未初始化回調(diào)函數(shù)");
          }

          }


          @Override
          public void onFailure(String exceptionMsg) {
          if (null != call) {
          call.onFailure(exceptionMsg);
          }

          }

          }
          ;

          request.execute(path);
          }

          }


          4、創(chuàng)建測試類進(jìn)行測試
          1package pattern;
          2/**
          3 *
          4 * @author xuzhiwei
          5 */

          6public class TestCallBack {
          7
          8public static void main(String[] args) {
          9
          10 Ranking ranking = new Ranking("http://localhost/net/index.php");
          11
          12 ranking.list(new ICallBack() {
          13
          14 @Override
          15public void onSuccess(String content) {
          16 complete(content);
          17 }

          18
          19 @Override
          20public void onFailure(String errorMsg) {
          21 complete(errorMsg);
          22 }

          23 }
          );
          24 }

          25
          26private static void complete(String msg)
          27{
          28 System.out.println("------請求完成---->"+msg);
          29 }

          30}

          31

          以上就是整個回調(diào)函數(shù)的處理過程了。第一次寫blog,請大家多多指教。
          posted on 2012-07-27 12:43 じZhìつ偉 閱讀(1434) 評論(2)  編輯  收藏

          評論:
          # re: [原創(chuàng)]java回調(diào)函數(shù)的使用筆記 [未登錄] 2012-07-27 16:50 | ゞ沉默是金ゞ
          Request should implement ICallBack, correct?  回復(fù)  更多評論
            
          # re: [原創(chuàng)]java回調(diào)函數(shù)的使用筆記 2012-07-27 17:10 | じZhìつ偉
          @ゞ沉默是金ゞ 也可以實現(xiàn)ICallBack接口。  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 出国| 赤峰市| 南昌县| 什邡市| 长海县| 新宁县| 平山县| 新绛县| 桂林市| 高尔夫| 台东市| 佛教| 阿尔山市| 沁阳市| 九江县| 分宜县| 宁海县| 兴和县| 思茅市| 齐河县| 开化县| 化隆| 蒲城县| 西平县| 梅河口市| 盈江县| 齐齐哈尔市| 延庆县| 衡山县| 嘉黎县| 余姚市| 沙洋县| 永昌县| 宜都市| 兴海县| 保亭| 通榆县| 漳平市| 长沙县| 吴川市| 佛坪县|