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

          1、創建回調接口

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

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

           

          2、創建調用http請求的類,用于向服務器發送請求,服務器內部進行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);
                 //返回請求結果
          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/**響應處理**/
          36public void onResponse(int code){
          37if(code == 200){  //狀態碼:200響應請求成功!調用 onSuccess 方法
          38 onSuccess("發送請求成功!");
          39 }
          else{
          40 onFailure("發送請求失??!請求代碼:"+code);
          41 }

          42 }

          43
          44}

          45


          3、創建請求控制類
          package pattern;

          /**
          *
          *
          @author xuzhiwei
          */

          public class Ranking {
          private String path;

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

           
          publicvoid 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、創建測試類進行測試
          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

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

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

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


          網站導航:
           
          主站蜘蛛池模板: 铁岭市| 孙吴县| 新民市| 巫山县| 舟曲县| 喀喇沁旗| 丹阳市| 汕尾市| 青龙| 洪泽县| 汝南县| 陵水| 凤城市| 中超| 准格尔旗| 杭锦旗| 汝南县| 富裕县| 栾城县| 徐水县| 安岳县| 乐业县| 凤台县| 海伦市| 府谷县| 全州县| 赤峰市| 凯里市| 龙井市| 西城区| 武平县| 全州县| 平山县| 长乐市| 万宁市| 桑日县| 西贡区| 延寿县| 嵊泗县| 龙州县| 双牌县|