接口回调
举个通俗的例子:
某天,我打电话向你请教问题,当然是个难题,你一时想不出解决方法,我又不能拿着电话在那里傻等,于是我们约定:等你想出办法后打手机通知我,这样,我就挂掉电话办其它事情去了。过了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 }
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 }
浙公网安备 33010602011771号