Android接口回调interfaceCallBack

首先,查看别人和结合自己理解的interface:

1,Java是继承机制的,接口可以实现多个,可以弥补这个缺点,提高各个类的拓展性;

2,接口回调,传值用的,灵活的应用可以使代码飘逸多变,这个也是一直纠结于接口理解的原因。

这边只想简单说说最基本的接口回调,


首先定义一个,里面含有某抽象方法,方法里面需要参数;

 其次在某个位置调用接口中的这个方法,对参数进行复制;

 最后在某个类实现接口,因为是接口中的方法是抽象方法需要被重写,得到接口中参数,获取参数中的值,


上面三步骤看起来貌似很简单,第一次实现起来遇到了各种各样的小问题。比如第二步的对参数进行赋值,怎么个赋值法,其实需要定一个方法,方法的参数是接口类型的,方法中调用 参数.接口中的方法,赋上值;然后这个方法得被调用,才能执行,执行之后才能对接口中抽象方法进行赋值。

这个时候我就到了需要获取接口中值得这个类,第一步是实现接口重写接口中的方法。第二部定义一个对接口方法参数赋值的类的对象,调用对象中的为接口中抽象方法赋值的方法,就是我们上一段中提到的执行这个方法;调用这个方法的时候因为需要一个接口类型的参数,这个时候直接传入this,这个this可能有些人理解不了,其实本身是需要传入接口类型的对象,由于我们当前的类已经实现了接口,所以我们直接传入this即可。

下面给出一个最简单的小例子:

1:定义接口

	public interface ZhongCallBack {
    		public void getName(String name);
	}
    2:为接口中方法的参数赋值:
	
	public class Mom {
   		public void setName(ZhongCallBack zhongCallBack){
        	String name = "zhonghuibin";
        	zhongCallBack.getName(name);
    		}
	}

3:获取接口传过来的值:

	public class Zhonghuibin implements ZhongCallBack{
    		private Mom mom;

   		public Zhonghuibin(Mom mom){
    	    	this.mom =mom;
   		 }
    		private void aa(){
       		mom.setName(this);
    		}
    		@Override
    		public void getName(String name) {
        		String Name = name;
    		}
	}
 
 

下面再给出一个在项目中实战的例子:

public class ApiRequestFactory {


Class 1:

public interface HttpCallBackListener {
    void onSuccess(String response, String url, int id);
    void failure(Call call, Exception e, int id);
public static void get(final Context context, final String url, Map<String,String> params  , 
final HttpCallBackListener httpCallBackListener, boolean isShowDialog){
    init(context);
    if (isShowDialog) {
        if (loadingDialog == null) {
            loadingDialog = new SpotsDialog(context,"正在加载数据");
        }
        loadingDialog.dismiss();
        loadingDialog.show();
    }
    OkHttpUtils
            .get()
            .url(ApiUrl.URL+url)
            .params(params)
            .build()
            .execute(new StringCallback() {
                @Override
                public void onError(Call call, Exception e, int id) {
                    if (loadingDialog != null) {
                        loadingDialog.dismiss();
                        loadingDialog = null;
                    }
                    ToastUtils.disPlayShort(context, "网络加载出现异常");
                    if (httpCallBackListener !=null) {
                        httpCallBackListener.failure(call, e, id);
                    }
                }

                @Override
                public void onResponse(String response, int id) {
                    if (loadingDialog != null) {
                        loadingDialog.dismiss();
                        loadingDialog = null;
                    }
                    if (response.contains("用户认证系统")){
                        ToastUtils.disPlayShort(context, "网络连接已断开,请检查网络连接");
                        return;
                    }
                    if (httpCallBackListener !=null) {
                        httpCallBackListener.onSuccess(response,url, id);
                    }
                }
            });
}
 
Class 2:
 
public void getBuildList() {
    getCompanyList(BookingMeetingRoom.this, "m=Androidstation&a=getbuildinglist",
            share.getCompanyId(),
            new ApiRequestFactory.HttpCallBackListener() {
                @Override
                public void onSuccess(String response, String url, int id) {
                    //下载成功的接口回调
                }
                @Override
                public void failure(Call call, Exception e, int id) {
                    //下载失败的接口回调
                }
            },true);
}
    这上面这个例子是在当前项目中直接拷出来的,是一个经过封装的下载,下载成功和失败之后的接口回调,未经过修改,
这里面和上面简单小例子的不同之处在于把接口直接放在了,给接口方法参数赋值的类里面,就是上面的12步写在了一起,这
样赋值起来简单通俗一点。
 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值