快速實現一個Http回調組件

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

快速實現一個Http回調組件

一、前情回顧

? 我們平時在使用一些庫的時候,會遇到一些看起來很舒服的寫法,用起來感覺很簡單,而且寫法也很優雅,比如OkHttp,或者是Java Swing的事件模式。

? 我們先看看Java的事件是怎么寫的:

public static void main(String[] args) {JFrame jf = new JFrame("事件監聽測試");jf.setVisible(true);jf.setSize(100, 200);JButton jb = new JButton("觸發事件");jf.add(jb);jb.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 進行邏輯處理即可System.out.println("觸發了事件");}});}

? 我們看到Swing的寫法是直接給組件添加了一個監聽器,然后回調里面的參數,這種寫法看起來仿佛就是組件自帶了某種動作一樣。

? 我們接下來也實現一個簡單的Http get請求回調。

二、組件設計

1.回調接口

public interface HttpRequestHandler {void onSuccess(String result);void onException(Exception e);}

2.處理器

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;public class HttpRequestProxy {private HttpRequestHandler httpRequestHandler;public HttpRequestProxy(HttpRequestHandler httpRequestHandler) {this.httpRequestHandler = httpRequestHandler;}/*** 模擬GET** @param urlString* @return*/public String get(String urlString) {HttpURLConnection connection = null;InputStream is = null;BufferedReader br = null;String result = null;// 返回結果字符串try {// 創建遠程url連接對象URL url = new URL(urlString);// 通過遠程url連接對象打開一個連接,強轉成httpURLConnection類connection = (HttpURLConnection) url.openConnection();// 設置連接方式:getconnection.setRequestMethod("GET");// 設置連接主機服務器的超時時間:15000毫秒connection.setConnectTimeout(15000);// 設置讀取遠程返回的數據時間:60000毫秒connection.setReadTimeout(60000);// 發送請求connection.connect();// 通過connection連接,獲取輸入流if (connection.getResponseCode() == 200) {is = connection.getInputStream();// 封裝輸入流is,并指定字符集br = new BufferedReader(new InputStreamReader(is, "UTF-8"));// 存放數據StringBuffer sbf = new StringBuffer();String temp;while ((temp = br.readLine()) != null) {sbf.append(temp);sbf.append("\r\n");}result = sbf.toString();this.httpRequestHandler.onSuccess(result);}} catch (IOException e) {this.httpRequestHandler.onException(e);} finally {// 關閉資源if (null != br) {try {br.close();} catch (IOException e) {e.printStackTrace();}}if (null != is) {try {is.close();} catch (IOException e) {e.printStackTrace();}}assert connection != null;connection.disconnect();// 關閉遠程連接}return result;}
}

3.調用

public class Main {public static void main(String[] args) {new HttpRequestProxy(new HttpRequestHandler() {@Overridepublic void onSuccess(String result) {System.out.println(result);}@Overridepublic void onException(Exception e) {e.printStackTrace();}}).get("http://www.baidu.com");}
}

轉載于:https://my.oschina.net/xiaoershaoye/blog/3036917

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279684.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279684.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279684.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MyBatis緩存通俗易懂

1.1 mybatis緩存介紹 如下圖,是mybatis一級緩存和二級緩存的區別圖解: Mybatis一級緩存的作用域是同一個SqlSession,在同一個sqlSession中兩次執行相同的sql語句,第一次執行完畢會將數據庫中查詢的數據寫到緩存(內…

DVbbs8.2入侵思路與總結

dvbbs8.2后比較變態,目前還沒有特別好的方法,外面有人提到一種方法就是直接上傳php文件或者其它服務器支持文件,這個也是一個思路,不過很多時候,單獨的服務器不會支持這么多。dvbbs禁用了asp和asp.net的上傳&#xff0…

Python基礎教程:Python pass語句詳解

2019獨角獸企業重金招聘Python工程師標準>>> Python pass 語句 Python pass是空語句,是為了保持程序結構的完整性。 pass 不做任何事情,一般用做占位語句。 Python 語言 pass 語句語法格式如下: 實例: 學習從來不是一個…

Oracle數據庫在Nokia

Nokia固然今非昔比,但在手機市場仍是未瘦死的駱駝,有關報道顯示Nokia現役的數據庫(包括Oracle、MySQL、MSSQL)達到2300套之多, DBA團隊共有20多人,平均每人100多套庫。 Grid Control在過去5年中是最主要的、也幾乎是唯一的DBA管理…

css animation動畫

css 動畫: 動畫是CSS3中具有顛覆性的特征之一,可通過設置多個節點來精確控制一個或一組動畫,常用來實現復雜的動畫效果. 必要元素:a、通過keyframes指定動畫序列;自動補間動畫,確定兩個點,系統會…

甘特圖看起來很生硬?教你使用智能顏色裝飾你的甘特圖!(二)

在上一篇文章中我們了解到顏色在甘特圖中也有不同的作用。其中顏色在甘特圖中扮演著三個角色,才能使甘特圖對用戶有意義。 顏色決定甘特圖的外觀。顏色還可以用來定義甘特圖的語義。因此,它們幫助用戶更快地理解甘特圖所呈現的完整且常常復雜的現實。顏色…

網絡串流_串流NFL足球的最便宜方式(無需電纜)

網絡串流Football season is almost upon us. That means one thing: expensive cable or satellite TV packages. Okay, it also means beer commercials and overpriced stadium tickets and quarterbacks trying to sell you car insurance. But in terms of immediate cost…

【高清】網絡安全思維導圖

本文轉自 是阿杰啊 51CTO博客,原文鏈接:http://blog.51cto.com/jschinamobile/1969018

生成函數初探

對給定序列\(\{a_{0,1,2,\cdots}\}\) 構造一個函數\(F(x)\sum_{i0,1,2,\cdots}a_if_i(x)\),稱\(F(x)\)為序列\(\{a_{0,1,2,\cdots}\}\)的生成函數。其中,序列\(\{f_{0,1,2,\cdots}(x)\}?\)只作為標志用,稱為標志函數。 普通型生成函數(OGF) …

Pixel相機是怎么做到自動補抓最不錯的自拍照

網絡大廠 AI研究團隊近日在最新的Pixel相機中,于無快門模式Photobooth新增親吻偵測功能,當用戶親吻自己的愛人時,相機會自動捕捉這一瞬間。網絡大廠過去是藉由Photobooth模式,讓用戶更簡單地成功自拍,不管是一個人、情…

os x 啟動引導_什么是OS X的啟動板以及它如何工作?

os x 啟動引導If you’re new to OS X, or even if you’re not and you’re simply used to pinning everything to the Dock, you might have wondered what Launchpad is, what it does, and how to use it. 如果您不熟悉OS X,或者即使您不熟悉OS X,而…

freeradius的proxy功能

要配置freeRADIUS的proxy功能,就需要熟悉它的兩個配置文件:proxy.conf 和client.conf。 1. proxy.conf主要是用來配置被代理的radius server(也叫home server) 和 realm, 以及他們之間的映射關系,也就是req…

小程序 iphone和安卓_如何阻止iPhone和iPad應用程序要求評級

小程序 iphone和安卓Lots of iPhone and iPad apps ask for ratings, and they often don’t stop. Even if you do leave a review just to stop seeing the review requests, new apps you install will pester you for reviews, too. iOS 11 fixes this problem, limiting h…

一篇年薪60萬的JVM性能調優文章

2019獨角獸企業重金招聘Python工程師標準>>> JVM 調優概述 性能定義 吞吐量 - 指不考慮 GC 引起的停頓時間或內存消耗,垃圾收集器能支撐應用達到的最高性能指標。延遲 - 其度量標準是縮短由于垃圾啊收集引起的停頓時間或者完全消除因垃圾收集所引起的停頓…

yum 出錯,提示Segmentation Fault (core Dumped) 的解決辦法

CentOS5.5部署Zlib導致yum使用不了,報錯Yum Segmentation Fault (core Dumped) 。 在一臺CentOS.5.5的機器上使用Yum時突然報錯,提示Yum Segmentation Fault (core Dumped) ;并產生core.*文件 解決辦法: # rpm -q zlib zlib-devel…

手機主題隨手機殼改變_無線充電可以與手機殼一起使用嗎?

手機主題隨手機殼改變With wireless charging making its way into the new iPhones, there are undoubtedly a lot of questions floating around about how this technology works in practical application. The biggest question I’ve heard so far is: will it work with…

求連續序列的最大子序列和

求一個序列的最大子序列和,這個可以有幾種方法都可以去求解,這里我提供兩種方法給大家。 假如這個序列是{1,-2,3,4},顯然最大子序列和是7,那么這個要怎么去計算呢? 第一種方法就是順…

Go語言與數據庫開發:01-09

包和工具 Go語言有超過100個的標準包(譯注:可以用 go list std | wc -l 命令查看標準包的具體數目),標準庫為大多數的程序提供了必要的基礎構件。在Go的社區,有很多成熟的包被設計、共享、重用和改進,目前互…

android 文本后圖標_如何在Android中更改文本,圖標等的大小

android 文本后圖標Let’s face it: no matter how good the screens are on our phones and tablets, the text can sometimes be too tiny if you have poor eyesight. The good news is that there are a variety of methods to help you alleviate squinting just to make …

Code Chef February Challenge 2019題解

傳送門 \(HMAPPY2\) 咕 話說這題居然卡\(scanf\)的么??? int T;cin>>T; while(T--){cin>>n>>a>>b>>k;puts(n/an/b-n/(a*b/__gcd(a,b))*2>k?"Win":"Lose"); } \(CHEFING\) 咕咕 int T;…