全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

IP查询系统的异步回调案例

话不多说,请看代码:

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异步回调函数中给外部变量赋值的问题探讨  # 回调  # 重写  # 网络地址  # 在这里  # 下载完成  # 必须要  # 什么时候  # 才会  # 我们可以  # 请输入  # 要给  # 多说  # 查询系统  # 查询结果  # 创建一个  # 多线程  # 要等到  # 再由  # 转化成  # 则将 


相关文章: ,交易猫的商品怎么发布到网站上去?  中山网站推广排名,中山信息港登录入口?  如何在西部数码注册域名并快速搭建网站?  Thinkphp 中 distinct 的用法解析  建站主机服务器选购指南:轻量应用与VPS配置解析  免费公司网站制作软件,如何申请免费主页空间做自己的网站?  浅谈Javascript中的Label语句  图册素材网站设计制作软件,图册的导出方式有几种?  C++如何编写函数模板?(泛型编程入门)  C++中引用和指针有什么区别?(代码说明)  头像制作网站在线制作软件,dw网页背景图像怎么设置?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  大连网站设计制作招聘信息,大连投诉网站有哪些?  香港服务器WordPress建站指南:SEO优化与高效部署策略  高端企业智能建站程序:SEO优化与响应式模板定制开发  如何批量查询域名的建站时间记录?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  贸易公司网站制作流程,出口贸易网站设计怎么做?  中山网站制作网页,中山新生登记系统登记流程?  如何基于云服务器快速搭建网站及云盘系统?  常州企业网站制作公司,全国继续教育网怎么登录?  如何快速选择适合个人网站的云服务器配置?  简单实现Android验证码  如何快速搭建高效WAP手机网站吸引移动用户?  建站之星安装后界面空白如何解决?  建站主机空间推荐 高性价比配置与快速部署方案解析  网站制作模板下载什么软件,ppt模板免费下载网站?  如何快速搭建高效WAP手机网站?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  如何快速搭建自助建站会员专属系统?  如何用PHP快速搭建CMS系统?  h5网站制作工具有哪些,h5页面制作工具有哪些?  深圳网站制作的公司有哪些,dido官方网站?  内部网站制作流程,如何建立公司内部网站?  如何在阿里云服务器自主搭建网站?  Python lxml的etree和ElementTree有什么区别  如何在景安云服务器上绑定域名并配置虚拟主机?  在线制作视频网站免费,都有哪些好的动漫网站?  微信h5制作网站有哪些,免费微信H5页面制作工具?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  如何快速生成ASP一键建站模板并优化安全性?  再谈Python中的字符串与字符编码(推荐)  官网网站制作腾讯审核要多久,联想路由器newifi官网  盐城做公司网站,江苏电子版退休证办理流程?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  网站制作多少钱一个,建一个论坛网站大约需要多少钱? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。