快速实现一个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.mzph.cn/news/279684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis缓存通俗易懂

1.1 mybatis缓存介绍 如下图,是mybatis一级缓存和二级缓存的区别图解: Mybatis一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内…

Python基础教程:Python pass语句详解

2019独角兽企业重金招聘Python工程师标准>>> Python pass 语句 Python pass是空语句,是为了保持程序结构的完整性。 pass 不做任何事情,一般用做占位语句。 Python 语言 pass 语句语法格式如下: 实例: 学习从来不是一个…

网络串流_串流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

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 引起的停顿时间或内存消耗,垃圾收集器能支撑应用达到的最高性能指标。延迟 - 其度量标准是缩短由于垃圾啊收集引起的停顿时间或者完全消除因垃圾收集所引起的停顿…

手机主题随手机壳改变_无线充电可以与手机壳一起使用吗?

手机主题随手机壳改变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…

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 …

Linux文本查看命令之uniq

uniq是专用的去重命令限制:必须相邻的两行内容相同才算是重复,如果内容相同,但是两行之间有其他内容就不算重复。使用uniq命令先排序,再去重。-d 的选项是用来仅显示重复行的-u 仅显示不重复的行-c 统计每一行出现的次数本文转自 …

BitMap位图与海量数据的理解与应用

1. Bit Map算法简介 来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。 2、 Bit Map的基本思想 我们先来看一个具体的例子&a…

imdb文件_如何停止IMDB应用程序向您发送通知

imdb文件Recently, the IMDB app started sending out notifications for “Featured Trailers”. As near as I can guess, this is where the production company pays IMDB to push a link to the trailer to a load of people in an effort to promote it. If IMDB isn’t …

科普:BCH能够买什么?如何使用BCH买东西?

2019独角兽企业重金招聘Python工程师标准>>> 一提到BCH,你最想拿它做什么?可能对于投资者来说,它是暴富的神器,是投资的工具;对于开发者来说,是实现自身价值构建应用程序的网络和平台&#xff0…

如何将iPhone或iPad更新到iOS 11

Apple released iOS 11 on September 19, 2017. You can upgrade by tapping “Install Now” when an update message appears, but you can also check for the update and install it immediately. 苹果于2017年9月19日发布了iOS11 。您可以通过在出现更新消息时点按“立即安…

如何在Outlook 2013中管理附件

There comes a time, job-hunting, or sharing photos with older family members, where you may need to send stuff the old fashioned way – as an email attachment. If you email at work, it may be a part of your email repertoire. 有时需要找工作,与年长…

ef 并发控制

ef 并发控制 ef 并发控制 什么是并发?并发分悲观并发和乐观并发。悲观并发:比如有两个用户A,B,同时登录系统修改一个文档,如果A先进入修改,则系统会把该文档锁住,B就没办法打开了,只有等A修改完…

如何在Windows上设置BitLocker加密

BitLocker is a tool built into Windows that lets you encrypt an entire hard drive for enhanced security. Here’s how to set it up. BitLocker是Windows内置的工具,可用于加密整个硬盘驱动器以增强安全性。 设置方法如下。 When TrueCrypt controversially …

Java字节码方法表与属性表深度剖析

方法表: 在上一次咱们已经分析到了字段信息了,如下: 紧接着就是方法相关的信息了: 而它展开之后的结构为: 所以往后数2个字节,看一下方法的总数: 3个方法,可咱们只定义了两个方法呀&…