在做客户端应用时, 经常遇到联网, 需要获取远端服务的response, 在数据返回时通知给客户端,在此做下记录。
1. 建一个线程, 处理发送和接收
//仅供备忘 , 需要完善的还有连接数控制,流处理,请求附加码,连接百分比等
abstract class Http implements Runnable {
public boolean isDisconnect = false;
private Thread thread;
private HttpURLConnection httpUrlConnection;
private URL Url;
public Http http;
private int state;
//保存连接
private List<HttpURLConnection> connections;
private InputStream inputStream;
private ArrayList<HttpURLConnection> removeAble = null;
public Http() {
System.out.println("---->Http Constructor<---");
http = this;
connections = new ArrayList<HttpURLConnection>();
thread = new Thread(this);
thread.start();
}
@Override
public void run() {
String path = "";
while (!isDisconnect) {
try {
Thread.sleep(10);
int cnt = 1;
for (HttpURLConnection conn : connections) {
path = conn.getURL().toString();
System.out.println("正在连接第" + cnt + "个, " + path);
inputStream = conn.getInputStream();
if (inputStream != null) {
System.out.println("正在读取:" + path);
onHttp(inputStream, path, conn.getResponseCode());
inputStream.close();
inputStream = null;
if (removeAble == null) {
removeAble = new ArrayList<HttpURLConnection>();
}
removeAble.add(conn);
}
cnt++;
}
// remove
if (removeAble != null) {
for (HttpURLConnection conn : removeAble) {
popConnect(conn);
}
}
} catch (InterruptedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public boolean get(String url) {
try {
Url = new URL(url);
httpUrlConnection = (HttpURLConnection) Url.openConnection();
httpUrlConnection.setRequestMethod("GET");
httpUrlConnection.setDoOutput(true);
httpUrlConnection.setConnectTimeout(10 * 1000);
pushConnect(httpUrlConnection);
System.out.println(connections.size());
Url = null;
httpUrlConnection = null;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
public boolean post(String url, byte[] buff) {
return true;
}
private void pushConnect(HttpURLConnection http) {
// for (HttpURLConnection h : connections) {
// String h1 = null;
// String h2 = null;
// h1 = h.getURL().getPath();
// h2 = http.getURL().getPath();
// if (h1.equals(h2)) {
// return;
// }
// }
this.connections.add(http);
}
private void popConnect(HttpURLConnection obj) {
synchronized (this) {
connections.remove(obj);
}
}
public abstract void onHttp(InputStream inputStream, String url, int code);
}
class HttpClient extends Http{
@Override
public void onHttp(...){
//在此事件里处理返回的流
}
}
分享到:
相关推荐
webhookinbox, 在实时中,接收HTTP回调并查看数据 WebhookInbox作者:Justin Karneges justin@fanout.io,Katsuyuki Ohmuro harmony7@pex2.jp 。邮件列表:http://lists.fanout.io/mailma
非常使用的post和get请求,带回调
如果您正在开发进行HTTP回调的服务,则WebhookInbox可以用作检查发送内容的便捷方法。 传入请求数据会实时显示在WebhookInbox网站上。 还有一个REST API可用,这意味着WebhookInbox可以以编程方式使用,例如希望...
异步http客户端Golang异步http客户端使用回调
呼应 Echod是一个完全可配置的模拟服务器和HTTP回调记录器。 测试外部服务是完美的。 通过代码或使用测试框架设置机制可以轻松地控制Echod。 Echod的主要部分是带有REST API的HTTP服务器,Echo HTTP服务器具有很大的...
详细实现讲解回调函数,简单易懂,详细见博客http://blog.csdn.net/iblue007/article/details/48804331
背景:视频云点播支持用户设置回调地址,在上传或者转码结束后向用户的回调地址以http协议发送回调信息,例如上传完成后的视频信息,视频转码信息。之前的测试方法:回调 背景:视频云点播支持用户设置回调地址,...
通过代码复用的场景理解回调函数是怎么一回事 http://blog.csdn.net/github_32453995/article/details/49532641
重点是接口回调的应用,不是购物车实现。下载前请看清楚说明。 详情参看博客:http://blog.csdn.net/qq_20521573/article/details/52054774
重点是接口回调的应用,不是购物车实现。下载前请看清楚说明。 详情参看博客:http://blog.csdn.net/qq_20521573/article/details/52054774
Objective-c利用协议实现回调函数 源码实例。文章:http://blog.csdn.net/viviwen123/article/details/8742552。
在之前的仿微信登录界面的基础上,增加了回调参数的功能。将注册的手机号以intent组件传递给登录界面的手机号编辑框内。
1.实现带一个参数或者两个参数的方法回调。 2.实现按钮围绕屏幕转动。 3.实现场景的切换(中间要有过渡场景,以便实现前一个场景资源的释放)。 4.实现label的循环旋转+不停的来回移动。 博客参考:...
JNI调用比较简单,根据JNI给出的实例,本内容主要讲多线程使用回调步骤:主要说明参照我的博文 http://blog.csdn.net/inr12345/article/details/8935350
通过暴露的方法往工作者传递消息,然后采用事件回调返回处理结果,实现的事件有OnThreadComplete,OnAddedTask,OnStart,OnSuccess,OnFailure,OnTimeout。 事件回调支持同步或异步,每工作者可以指定执行超时时间...
一个自定义的dialog,其实只是继承了dialogfragment,博客地址为http://blog.csdn.net/u013651405/article/details/47834057
android-async-http是Android上的一个异步、基于回调的HTTP客户端开发包,建立在Apache的HttpClient库上.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
使用Thunk技术改写窗口类回调函数为窗口对象成员函数。 具有介绍看 http://chzup.blog.163.com/blog/static/10771319201133014637408/
http://blog.csdn.net/IT_XF/article/details/65058367