Java 回调简单Demo

这两天老师讲的都是基础,上课听听,下课就学自己学的,以前写Android的时候,比如在RecyclerViwe 中,官方为了使RecyclerView更加的灵活,没有向外边提供单击,长按Button的接口,所以这些东西写都需要自己进行定义接口,进行回调使用,那么就是这个如何回调,就是一个学习快了,在学校的时候就是想学习一下,后来因为放假,就没有写,昨天看了看找到最基本的例子进行学习了一下。只是浅薄的弄清了到底是怎么回事儿,今天正好有时间,就写一下。

见名知意:就是返回来进行调用呗。简单的来说就是A调用B的时候,B就同时(同步回调)或者非同时(异步回调)的调用一下A。

这里就是接口的一个使用环境了,我这里逻辑例子就是一个员工进行工作,老板对员工说,你把项目完成后就通过电话告诉我一声,我确定后通过秘书告诉你就可以下班了。

这里的员工就是A类 ,而老板就是B类了。

一、我们首先定义一个接口,这里的接口就类似于Boss的秘书了

public interface INotice {
	public void tallBossOk(String strAsk);
}
然后我们希望员工能够拥有秘书通知你的一种方式,我们需要定义一个员工类进行实现这个方式。

二、员工类实现这个秘书

package com.hejingzhou.boss;

public class Staff implements INotice{  
	private Boss boss;
	public Staff(Boss boss){
		this.boss = boss;
	}
	public void startJob(){
		try {
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		askResult("现在告诉老板我们完成工作了");
	}
	public void askResult(String str){
		System.out.println(str);
		boss.callBossMothod(Staff.this);//A调用B
	}
	public void tallBossOk(String strAsk) {
		// TODO Auto-generated method stub
		System.out.println("老板回应说"+strAsk);
	}

	
}
通过员工类就可以知道,我们员工主要分为三部分,①进行自己的工作(这里我只是通过休眠线程进行模拟)②进行调用告诉老板做完时向老板打电话告诉他你做完了③老板通过秘书告诉你的信息。
当员工做完事情后,就会通过电话告诉老板。现在看看老板是怎么进行高冷的说了一句::“行 你可以走了“。

三、老板类

public class Boss {
	public void callBossMothod(INotice iNotice){
		iNotice.tallBossOk("行,你可以走了");//B调用A
	}
}
老板只是通过调用了自己的秘书告诉你可以走了。

四、启动程序

package com.hejingzhou.boss;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Boss boss = new Boss();
		Staff staff = new Staff(boss);
		System.out.println("现在开始工作");
		staff.startJob();
		//staff.askResult("现在告诉告诉老板我已经完成了工作");
	}

}
这样的话就可以可以完成整个流程了。
------------------------打印结果---------------------------
现在开始工作
现在告诉老板我们完成工作了
老板回应说行,你可以走了
---------------------------------------------------
这样就完成一个简单的回调。
微信支付的订单通知通常通过POST请求发送到您配置好的服务器上的回调地址。在Java中处理这个通知,你需要创建一个HTTP接收器并解析XML格式的通知数据。下面是一个基本的示例代码片段: ```java import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.DocumentBuilder; import org.w3c.dom.Document; import org.w3c.dom.NodeList; import org.w3c.dom.Node; import org.w3c.dom.Element; public class WechatPayCallback { public static void main(String[] args) { try { // 模拟接收到的微信支付通知请求 String requestXml = ... // 获取实际接收到的XML内容 // 解析XML DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); Document doc = dBuilder.parse(new InputSource(requestXml)); doc.getDocumentElement().normalize(); NodeList nodeList = doc.getElementsByTagName("xml"); Node node = nodeList.item(0); Element element = (Element) node; // 提取关键信息如交易状态、商户订单号等 String tradeType = element.getElementsByTagName("trade_type").item(0).getTextContent(); String transactionId = element.getElementsByTagName("transaction_id").item(0).getTextContent(); // 根据业务逻辑处理通知,比如更新数据库、发送邮件确认等 System.out.println("Trade Type: " + tradeType); System.out.println("Transaction ID: " + transactionId); // 返回响应给微信,验证成功与否 String response = "<return_code><![CDATA[SUCCESS]]></return_code>" + "<return_msg><![CDATA[OK]]></return_msg>"; System.out.println(response); } catch (Exception e) { e.printStackTrace(); } } } ``` 请注意,这只是一个基础的示例,实际生产环境中需要对XML解析后的数据进行有效性检查,并且根据具体的业务逻辑处理通知。此外,为了安全起见,你还需要对敏感信息进行加密存储,以及对请求的合法性进行验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值