接口回调

举个通俗的例子:

某天,我打电话向你请教问题,当然是个难题,你一时想不出解决方法,我又不能拿着电话在那里傻等,于是我们约定:等你想出办法后打手机通知我,这样,我就挂掉电话办其它事情去了。过了XX分钟,我的手机响了,你兴高采烈的说问题已经搞定,应该如此这般处理。故事到此结束。这个例子说明了“异步+回调”的编程模式。其中,你后来打手机告诉我结果便是一个“回调”过程。

 

直接上代码

 1 public interface Callback {
 2 
 3     void onStart(String str);
 4     
 5     void onFinished(String str);
 6     
 7     void onError(String str);
 8     
 9     boolean isClass();
10 }
接口

 

 1 // 界面
 2 public class A{
 3 
 4     
 5     public static void main(String[] args) {
 6         
 7         B b = new B(new Callback() {
 8             
 9             @Override
10             public void onStart(String str) {
11                 System.out.println(str);
12             }
13             
14             @Override
15             public void onFinished(String str) {
16                 System.out.println(str);
17             }
18             
19             @Override
20             public boolean isClass() {
21                 return false;
22             }
23 
24             @Override
25             public void onError(String str) {
26                 System.out.println(str);
27             }
28         });
29         
30         
31         b.doSomething();
32         
33     }
34 
35     
36 }
界面

 

 1 //业务
 2 public class B {
 3     Callback back;
 4 
 5     public B(Callback b) {
 6         back = b;
 7     }
 8 
 9     public void doSomething() {
10 
11         new Thread(new Runnable() {
12 
13             @Override
14             public void run() {
15 
16                 String type = "";
17                 if (back.isClass()) {
18                     type = "class";
19                 } else {
20                     type = "others";
21                 }
22                 back.onStart("the work is starting,and type is " + type);
23 
24                 try {
25                     Thread.sleep(2000);
26                     back.onFinished("the work is finish");
27                 } catch (Exception e) {
28                     // TODO Auto-generated catch block
29                     back.onError(e.toString());
30 
31                 }
32             }
33         }).start();
34     }
35 
36 }
业务

 

 

接口传值,以下代码可能就自己比较容易看懂了,因为直接从自己的项目里抽了几行出来

1 /**
2      * 接口传值
3      * 
4      * @author kid created on 2016年5月23日
5      *
6      */
7     public interface OnBannerStrListener {
8         void onBannderStr(String s);
9     }
定义接口

 

 1 /**
 2      * 获得banner数组
 3      *
 4      * @return
 5      */
 6     private void getBannerStr(final OnBannerStrListener onBannerStrListener) {
 7         HttpUtils httpUtils = new HttpUtils();
 8         httpUtils.send(HttpMethod.GET, Constant.Url.YLURL, new RequestCallBack<String>() {
 9 
10             @Override
11             public void onFailure(HttpException arg0, String arg1) {
12             }
13 
14             @Override
15             public void onSuccess(ResponseInfo<String> arg0) {
16                 onBannerStrListener.onBannderStr(arg0.result);
17             }
18 
19         });
20     }
View Code

 

 1 getBannerStr(new OnBannerStrListener() {
 2 
 3          @Override
 4          public void onBannderStr(String s) {
 5          View banner = createBanner(JSON.parseObject(s));
 6          if (banner != null) {
 7            listView.addHeaderView(banner);
 8          }
 9 
10         }
11   });
12 }
View Code

 

posted on 2016-09-28 16:05  小阿仙的fans  阅读(184)  评论(0)    收藏  举报

导航