最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

IP查詢系統(tǒng)的異步回調(diào)案例

 更新時間:2017年02月16日 14:29:33   作者:沁宇  
本文主要分享了IP查詢系統(tǒng)的異步回調(diào)案例,具有很好的參考價值,下面跟著小編一起來看下吧

話不多說,請看代碼:

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{
  // 下載結(jié)束的回調(diào)接口
  public interface IResult{
    void success(String msg);
    void fail(String msg);
  }
  // 創(chuàng)建網(wǎng)絡(luò)地址的引用
  String addr;
  // 創(chuàng)建回調(diào)接口的引用
  IResult iResult ;
  // 生成構(gòu)造方法把網(wǎng)絡(luò)和接口的引用傳進去
  public Http(String addr, IResult iResult) {
    super();
    this.addr = addr;
    this.iResult = iResult;
    // 開啟線程 線程一開啟就產(chǎn)生了異步
    start();
  }
  @Override
  // 重寫線程的run方法,只要是網(wǎng)絡(luò)就要用到多線程
  public void run() {
    try {
      // 創(chuàng)建URL,把網(wǎng)絡(luò)地址傳進去
      URL url = new URL(addr);
      try {
        // 利用字符緩沖讀取流讀取網(wǎng)絡(luò)數(shù)據(jù)
        BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()));
        // 創(chuàng)建stringbuffer對象
        StringBuffer sb = new StringBuffer();
        // 創(chuàng)建一個臨時儲存字符串的變量
        String temp;
        // 當(dāng)temp不為空是就一直讀取數(shù)據(jù)
        while ((temp = br.readLine()) != null) {
          sb.append(temp);
        }
        // 數(shù)據(jù)讀取成功后
        // 把讀取的所有數(shù)據(jù)傳到回調(diào)接口,再由接口傳出去
        iResult.success(sb.toString());
      } catch (IOException e) {
        e.printStackTrace();
      }
    } catch (MalformedURLException e) {
      e.printStackTrace();
      // 網(wǎng)絡(luò)請求發(fā)生異常
      iResult.fail("網(wǎng)絡(luò)請求失敗");
    }
  }
}
package com.lxj.demo;
import net.sf.json.JSONObject;
import com.xykj.demo.Http.IResult;
public class IPRequest {
  // 請求IP信息的回調(diào)接口,在這里必須要使用回調(diào),因為不知道Http什么時候下載完成
  public interface IRequest{
    void success(IPBean ipBean);
    void fail(String msg);
  }
  // 只要給一個ip地址和回調(diào)接口,我們可以通過回調(diào)接口傳回轉(zhuǎn)化好的ip信息對象
  public void request(String IP,IRequest iRequest){
    // 把用戶輸入的ip地址拼接到url中,發(fā)起Http請求
    String addr ="http://apicloud.mob.com/ip/query?key=520520test&ip="
        + IP
        + "";
    new Http(addr, new IResult() {
      // 創(chuàng)建完的IResult success和fail不會馬上調(diào)用,必須要等到Http下載完成或者發(fā)生異常才會調(diào)用
      @Override
      public void success(String msg) {
        // 把接收的json數(shù)據(jù)轉(zhuǎn)化成IPBean對象
        JSONObject jsonObject = JSONObject.fromObject(msg);
        IPBean ipBean = (IPBean) JSONObject.toBean(jsonObject, IPBean.class);
        // 產(chǎn)生回調(diào),把轉(zhuǎn)化好的對象傳遞出去給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方法,否則將打印的內(nèi)存里面的地址
    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查詢系統(tǒng)************");
    Scanner sc = new Scanner(System.in);
    // 創(chuàng)建IPRequest對象
    IPRequest ipRequest = new IPRequest();
    while (true) {
      System.out.println("請輸入要查詢的IP:");
      String ip = sc.next();
      // 調(diào)用IPRequest里面的request方法
      ipRequest.request(ip, new IRequest() {
        @Override
        public void success(IPBean ipBean) {
          System.out.println("*************查詢結(jié)果*************");
          System.out.println(ipBean.getResult());
        }
        @Override
        public void fail(String msg) {
          System.out.println(msg);
        }
      });
    }
  }
}

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!

相關(guān)文章

  • 將JavaDoc注釋生成API文檔的操作

    將JavaDoc注釋生成API文檔的操作

    這篇文章主要介紹了將JavaDoc注釋生成API文檔的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring Boot中使用Actuator的/info端點輸出Git版本信息

    Spring Boot中使用Actuator的/info端點輸出Git版本信息

    這篇文章主要介紹了Spring Boot中使用Actuator的/info端點輸出Git版本信息,需要的朋友可以參考下
    2017-06-06
  • hadoop是什么語言

    hadoop是什么語言

    Hadoop是一個由Apache基金會所開發(fā)的分布式系統(tǒng)基礎(chǔ)架構(gòu)。 用戶可以在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序。充分利用集群的威力進行高速運算和存儲
    2017-09-09
  • MybatisPlus中saveBatch方法的使用

    MybatisPlus中saveBatch方法的使用

    本文介紹了MyBatisPlus中的saveBatch方法的使用及其實現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • 利用Java實現(xiàn)紅黑樹

    利用Java實現(xiàn)紅黑樹

    紅黑樹是眾多“平衡的”搜索樹模式中的一種,在最壞情況下,它相關(guān)操作的時間復(fù)雜度為O(log n),接下倆小編將子啊下文詳細(xì)介紹Java是如何實現(xiàn)紅黑樹的
    2021-09-09
  • springboot 如何使用jackson來處理實體類

    springboot 如何使用jackson來處理實體類

    這篇文章主要介紹了springboot使用jackson來處理實體類的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringBoot?web靜態(tài)資源映射實現(xiàn)步驟詳解

    SpringBoot?web靜態(tài)資源映射實現(xiàn)步驟詳解

    在springBoot中的靜態(tài)資源的映射是通過SpringMVC中的resourceHttpRequestHandler來進行實現(xiàn)的。在該請求映射器中默認(rèn)規(guī)定了,SpringBoot會將classPath或者ServletContext下的/static?(/public、/resources?或?/META-INF/resources)目錄中,存放靜態(tài)資源
    2022-09-09
  • 解決tk mapper 通用mapper的bug問題

    解決tk mapper 通用mapper的bug問題

    這篇文章主要介紹了解決tk mapper 通用mapper的bug問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot 搭建架構(gòu)5種方法示例詳解

    SpringBoot 搭建架構(gòu)5種方法示例詳解

    SpringBoot是基于Spring框架的便捷開發(fā)框架,通過約定優(yōu)于配置實現(xiàn)快速構(gòu)建獨立應(yīng)用,文章介紹了五種搭建SpringBoot項目的方法,包括使用IntelliJ IDEA、Spring官網(wǎng)、阿里云官網(wǎng)以及將現(xiàn)有Maven項目轉(zhuǎn)換為SpringBoot項目,感興趣的朋友跟隨小編一起看看吧
    2025-03-03
  • springsecurity中http.permitall與web.ignoring的區(qū)別說明

    springsecurity中http.permitall與web.ignoring的區(qū)別說明

    這篇文章主要介紹了springsecurity中http.permitall與web.ignoring的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論

德江县| 弋阳县| 山阳县| 河南省| 新密市| 抚顺市| 明星| 虎林市| 叙永县| 凤阳县| 澄城县| 洞头县| 焦作市| 闸北区| 塘沽区| 泽州县| 莲花县| 仲巴县| 都兰县| 荣昌县| 临清市| 岐山县| 桃园县| 沽源县| 绥德县| 五莲县| 开江县| 镇坪县| 兴文县| 任丘市| 巴林右旗| 团风县| 津市市| 阿合奇县| 平江县| 遵化市| 石城县| 景东| 南岸区| 峨眉山市| 手游|