关于java回调机制的一些理解

本文通过一个贴纸画板项目详细介绍了Java回调机制的应用场景。在解决绘画操作的撤销与复原功能时,作者运用回调机制成功实现了不同组件间的通信。此外,还提供了一个网络请求中的回调机制案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前在学Java基础课的时候就听说了Java的回调机制,当时学的是一知半解,学完就忘记了,也一直没有用到过。后来听说这块的内容还是蛮重要的,就又去复习了几遍,但是我一直都不知道这个机制该怎么时候去使用它。最近在写项目的时候,第一次用到了这个东西,感觉才算是真正理解了这个机制。

先讲一下项目吧,是这样的。我做了一个贴纸画板,用了网上的stickerView框架,我把在StickerView界面上面的手指触摸的监听操作Ontouch()函数写在了StickerView框架下的stickerview类中,但是后来添加了一个需求,就是在画板上面进行绘画的操作,要求有撤销和复原绘画轨迹的功能,而且撤销和复原这两个按钮要做一个判断,判断当前的画板是否有path来给你撤销或是复原。这时就出现了一个问题:我要在makefragment(一个Fragment)板块里面设置控件的不可点击,但是判断控件是否可以点击的函数只能写在stickerview类中,如何把这两个类联系起来? 我一开始想到的是在stickerview中创建makefragment,把makefragment板块传进去就可以了啊,但是有一个问题就是:stickerview在StickerView工程下,是无法导入makefragment的那个包的,所以自然是不行的,那么就只能用回调机制。

 在stickerview类中写接口callback,函数体是判断撤回和复原按钮是否可用,并创建callback引用,设置set()和get()函数。在makefragment中实现接口,并实现接口中的两个方法,实现的方法调用先前在makefragment中创建好的mStickerview实例的判断是否有path可用的函数,来改变两个按钮是否可用,最后mStickerback.setCallback(this)把makefragment传入stickerview内,再在每次绘画完成或者点击回撤复原按钮后便调用callback实例的两个判断函数,就完成了。

因为没有项目的源码,所以可能是有点绕,希望自己以后再搞忘记回调机制的时候再回来看看能回想起来(应该是不会忘记了)。

还有一个案例,我以前在看郭神的第二行代码的时候,他在网络那一章,写了利用回调机制来进行网络资源的获取。案例比我这个通俗易懂多了。

在android中所有的网络请求都要写在子线程中,因为需要网络连接部分一般有很多,所以我们一般把网络连接的版块单独提出来,做成一个静态方法,每次调用的时候只需要把URL传进去,返回一个网络请求的返回数据就可以了。那么问题来了,在网络连接的方法中开子线程,每次调用这个函数的时候,会出现服务器还没来得及响应你的请求,这个函数就执行完了,取不到返回值的情况。这个时候怎么办呢?使用回调。

我们定义一个接口

public interface HttpCallback{
    void onfinish(String reponse);
    void onerrer(Exception e);
}

在我们需要连接网络的类中实现这个接口并实现接口方法。

class Xxx extends XXX implements HttpCallback{
    @override 
    public void onfinish(String reponse){
        //这里根据返回值写具体逻辑
    }
    @override
    public void onerrer(Exception e){
        //这里写对错误处理
    }
}

然后把class Xxx的实例传到网络连接的工具函数中去就可以了,当工具函数执行完网络请求操作以后就执行HttpCallback.onfinish(String reponse)和HttpCallback.onerrer()两个个函数就可以顺利取到返回值和进行错误处理了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值