IP查询系统的异步回调案例
发布时间 - 2026-01-10 23:06:06 点击率:次话不多说,请看代码:
package com.lxj.demo;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
public class Http extends Thread{
// 下载结束的回调接口
public interface IResult{
void success(String msg);
void fail(String msg);
}
// 创建网络地址的引用
String addr;
// 创建回调接口的引用
IResult iResult ;
// 生成构造方法把网络和接口的引用传进去
public Http(String addr, IResult iResult) {
super();
this.addr = addr;
this.iResult = iResult;
// 开启线程 线程一开启就产生了异步
start();
}
@Override
// 重写线程的run方法,只要是网络就要用到多线程
public void run() {
try {
// 创建URL,把网络地址传进去
URL url = new URL(addr);
try {
// 利用字符缓冲读取流读取网络数据
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
// 创建stringbuffer对象
StringBuffer sb = new StringBuffer();
// 创建一个临时储存字符串的变量
String temp;
// 当temp不为空是就一直读取数据
while ((temp = br.readLine()) != null) {
sb.append(temp);
}
// 数据读取成功后
// 把读取的所有数据传到回调接口,再由接口传出去
iResult.success(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
} catch (MalformedURLException e) {
e.printStackTrace();
// 网络请求发生异常
iResult.fail("网络请求失败");
}
}
}
package com.lxj.demo;
import net.sf.json.JSONObject;
import com.xykj.demo.Http.IResult;
public class IPRequest {
// 请求IP信息的回调接口,在这里必须要使用回调,因为不知道Http什么时候下载完成
public interface IRequest{
void success(IPBean ipBean);
void fail(String msg);
}
// 只要给一个ip地址和回调接口,我们可以通过回调接口传回转化好的ip信息对象
public void request(String IP,IRequest iRequest){
// 把用户输入的ip地址拼接到url中,发起Http请求
String addr ="http://apicloud.mob.com/ip/query?key=520520test&ip="
+ IP
+ "";
new Http(addr, new IResult() {
// 创建完的IResult success和fail不会马上调用,必须要等到Http下载完成或者发生异常才会调用
@Override
public void success(String msg) {
// 把接收的json数据转化成IPBean对象
JSONObject jsonObject = JSONObject.fromObject(msg);
IPBean ipBean = (IPBean) JSONObject.toBean(jsonObject, IPBean.class);
// 产生回调,把转化好的对象传递出去给Demo
iRequest.success(ipBean);
}
@Override
public void fail(String msg) {
// Http请求失败的时候
iRequest.fail(msg);
}
});
}
}
package com.lxj.demo;
public class IPBean {
public static class Result{
private String city;
private String country;
private String ip;
private String province;
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
@Override
// 这里必须要重写toString方法,否则将打印的内存里面的地址
public String toString() {
return "city:" + city + "\ncountry:" + country + "\nip:"
+ ip + "\nprovince:" + province;
}
}
Result result;
private String msg;
private String retCode;
public Result getResult() {
return result;
}
public void setResult(Result result) {
this.result = result;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getRetCode() {
return retCode;
}
public void setRetCode(String retCode) {
this.retCode = retCode;
}
}
package com.lxj.demo;
import java.util.Scanner;
import com.xykj.demo.IPRequest.IRequest;
public class Demo {
public static void main(String[] args) {
System.out.println("************欢迎使用IP查询系统************");
Scanner sc = new Scanner(System.in);
// 创建IPRequest对象
IPRequest ipRequest = new IPRequest();
while (true) {
System.out.println("请输入要查询的IP:");
String ip = sc.next();
// 调用IPRequest里面的request方法
ipRequest.request(ip, new IRequest() {
@Override
public void success(IPBean ipBean) {
System.out.println("*************查询结果*************");
System.out.println(ipBean.getResult());
}
@Override
public void fail(String msg) {
System.out.println(msg);
}
});
}
}
}
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# 异步回调
# 使用Promise链式调用解决多个异步回调的问题
# Android异步回调中的UI同步性问题分析
# jQuery的promise与deferred对象在异步回调中的作用
# jquery Deferred 快速解决异步回调的问题
# C#中异步回调函数用法实例
# Nodejs异步回调的优雅处理方法
# JavaScript异步回调的Promise模式封装实例
# python实现异步回调机制代码分享
# C# 委托的三种调用示例(同步调用 异步调用 异步回调)
# 跨平台python异步回调机制实现和使用方法
# ajax异步回调函数中给外部变量赋值的问题探讨
# 回调
# 重写
# 网络地址
# 在这里
# 下载完成
# 必须要
# 什么时候
# 才会
# 我们可以
# 请输入
# 要给
# 多说
# 查询系统
# 查询结果
# 创建一个
# 多线程
# 要等到
# 再由
# 转化成
# 则将
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何用好域名打造高点击率的自主建站?
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
打造顶配客厅影院,这份100寸电视推荐名单请查收
Laravel如何实现用户密码重置功能?(完整流程代码)
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
EditPlus中的正则表达式 实战(4)
高端建站如何打造兼具美学与转化的品牌官网?
如何快速上传自定义模板至建站之星?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
如何用JavaScript实现文本编辑器_光标和选区怎么处理
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
如何为不同团队 ID 动态生成多个“认领值班”按钮
轻松掌握MySQL函数中的last_insert_id()
零服务器AI建站解决方案:快速部署与云端平台低成本实践
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
电商网站制作价格怎么算,网上拍卖流程以及规则?
C++时间戳转换成日期时间的步骤和示例代码
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
Laravel如何处理CORS跨域请求?(配置示例)
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
如何在云主机快速搭建网站站点?
怎样使用JSON进行数据交换_它有什么限制
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
油猴 教程,油猴搜脚本为什么会网页无法显示?
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
详解Android中Activity的四大启动模式实验简述
JS弹性运动实现方法分析
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
如何在万网ECS上快速搭建专属网站?
phpredis提高消息队列的实时性方法(推荐)
Laravel Session怎么存储_Laravel Session驱动配置详解
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
JavaScript如何实现倒计时_时间函数如何精确控制
北京专业网站制作设计师招聘,北京白云观官方网站?
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法
Firefox Developer Edition开发者版本入口
JavaScript如何实现类型判断_typeof和instanceof有什么区别
如何在香港免费服务器上快速搭建网站?
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
网站图片在线制作软件,怎么在图片上做链接?
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Android自定义控件实现温度旋转按钮效果

