StupidBeauty
Read times:1571Posted at:Fri Jun 20 06:05:21 2014
- no title specified

AndroidAsync文档翻译:读我,README.md

AndroidAsync

AndroidAsync是一个低级别的网络协议库。如果妳正在找一个易用的、高级别的、支持安卓的http请求库,那么,看看 Ion (它是以AndroidAsync 为基础开发的)。一般的安卓应用程序开发者应当对Ion 更感兴趣。

但是,如果妳想找的是一个用于安卓的原始 套接字 Socket)、HTTP客户端/服务器WebSocketSocket.IO库,那么,AndroidAsync就是妳要找的东西了。

特性

基于NIO。单线程,使用回调函数来驱动。高效。

所有的操作都返回一个 未来 对象(Future),可用于取消请求

Socket客户端+ socket服务器

HTTP客户端+ 服务器

WebSocket客户端+ 服务器

Socket.IO客户端

下载

下载 最新版的 JAR

将某个统一资源定位符的内容下载为一个String

// url就是要下载的统一资源定位符。

AsyncHttpClient.getDefaultInstance().getString(url, new AsyncHttpClient.StringCallback() {

// 当发生异常、错误,或者收到结果时,会调用此回调函数。

@Override

public void onCompleted(Exception e, AsyncHttpResponse response, String result) {

if (e != null) {

e.printStackTrace();

return;

}

System.out.println("I got a string: " + result);

}

});

将某个统一资源定位符的内容下载为JSON

// url就是要下载的统一资源定位符。

AsyncHttpClient.getDefaultInstance().getJSONObject(url, new AsyncHttpClient.JSONObjectCallback() {

// 当发生异常、错误,或者收到结果时,会调用此回调函数。

@Override

public void onCompleted(Exception e, AsyncHttpResponse response, JSONObject result) {

if (e != null) {

e.printStackTrace();

return;

}

System.out.println("I got a JSONObject: " + result);

}

});

类似地,JSONArrays...

// url就是要下载的统一资源定位符。

AsyncHttpClient.getDefaultInstance().getJSONArray(url, new AsyncHttpClient.JSONArrayCallback() {

// 当发生异常、错误,或者收到结果时,会调用此回调函数。

@Override

public void onCompleted(Exception e, AsyncHttpResponse response, JSONArray result) {

if (e != null) {

e.printStackTrace();

return;

}

System.out.println("I got a JSONArray: " + result);

}

});

将某个统一资源定位符的内容下载为一个文件

AsyncHttpClient.getDefaultInstance().getFile(url, filename, new AsyncHttpClient.FileCallback() {

@Override

public void onCompleted(Exception e, AsyncHttpResponse response, File result) {

if (e != null) {

e.printStackTrace();

return;

}

System.out.println("my file is available at: " + result.getAbsolutePath());

}

});

当然,也支持缓存

// 参数分别是:http客户端对象实例、用于存储缓存文件的目录和以字节数表示的缓存大小

ResponseCacheMiddleware.addCache(AsyncHttpClient.getDefaultInstance(),

getFileStreamPath("asynccache"),

1024 * 1024 * 10);

还可以创建网页套接字(web sockets):

AsyncHttpClient.getDefaultInstance().websocket(get, "my-protocol", new WebSocketConnectCallback() {

@Override

public void onCompleted(Exception ex, WebSocket webSocket) {

if (ex != null) {

ex.printStackTrace();

return;

}

webSocket.send("a string");

webSocket.send(new byte[10]);

webSocket.setStringCallback(new StringCallback() {

public void onStringAvailable(String s) {

System.out.println("I got a string: " + s);

}

});

webSocket.setDataCallback(new DataCallback() {

public void onDataAvailable(ByteBufferList byteBufferList) {

System.out.println("I got some bytes!");

// 注意,这砣数据已经读取了

byteBufferList.recycle();

}

});

}

});

AndroidAsync还支持socket.io

SocketIOClient.connect(AsyncHttpClient.getDefaultInstance(), "http://192.168.1.2:3000", new ConnectCallback() {

@Override

public void onConnectCompleted(Exception ex, SocketIOClient client) {

if (ex != null) {

ex.printStackTrace();

return;

}

client.setStringCallback(new StringCallback() {

@Override

public void onString(String string) {

System.out.println(string);

}

});

client.on("someEvent", new EventCallback() {

@Override

public void onEvent(JSONArray argument, Acknowledge acknowledge) {

System.out.println("args: " + arguments.toString());

}

});

client.setJSONCallback(new JSONCallback() {

@Override

public void onJSON(JSONObject json) {

System.out.println("json: " + json.toString());

}

});

}

});

想做multipart/form-data形式的上传?也可以。

AsyncHttpPost post = new AsyncHttpPost("http://myservercom/postform.html");

MultipartFormDataBody body = new MultipartFormDataBody();

body.addFilePart("my-file", new File("/path/to/file.txt");

body.addStringPart("foo", "bar");

post.setBody(body);

AsyncHttpClient.getDefaultInstance().execute(post, new StringCallback() {

@Override

public void onCompleted(Exception e, AsyncHttpResponse source, String result) {

if (e != null) {

ex.printStackTrace();

return;

}

System.out.println("Server says: " + result);

}

});

还可以使用AndroidAsync 创建简单的HTTP 服务器:

AsyncHttpServer server = new AsyncHttpServer();

List<WebSocket> _sockets = new ArrayList<WebSocket>();

server.get("/", new HttpServerRequestCallback() {

@Override

public void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) {

response.send("Hello!!!");

}

});

// 监听端口5000

server.listen(5000);

// 使用浏览器访问http://localhost:5000 则会返回Hello!!!

还有WebSocket服务器

server.websocket("/live", new WebSocketRequestCallback() {

@Override

public void onConnected(final WebSocket webSocket, RequestHeaders headers) {

_sockets.add(webSocket);

//使用这个回调函数来清除掉任何残存的对于妳的websocket的引用

websocket.setClosedCallback(new CompletedCallback() {

@Override

public void onCompleted(Exception ex) {

try {

if (ex != null)

Log.e("WebSocket", "Error");

} finally {

_sockets.remove(webSocket);

}

}

});

webSocket.setStringCallback(new StringCallback() {

@Override

public void onStringAvailable(String s) {

if ("Hello Server".equals(s))

webSocket.send("Welcome Client!");

}

});

}

});

//..过一段时间之后,发送广播!

for (WebSocket socket : _sockets)

socket.send("Fireball!");

未来Futures

所有的这些应用编程接口都会返回 未来对象 Futures )。

Future<String> string = client.getString("http://foo.com/hello.txt");

// 以下代码将导致阻塞,并且,出现错误时还可能抛出异常!

String value = string.get();

未来对象也可以设置回调函数……

Future<String> string = client.getString("http://foo.com/hello.txt");

string.setCallback(new FutureCallback<String>() {

@Override

public void onCompleted(Exception e, String result) {

System.out.println(result);

}

});

简易写法……

client.getString("http://foo.com/hello.txt")

.setCallback(new FutureCallback<String>() {

@Override

public void onCompleted(Exception e, String result) {

System.out.println(result);

}

});

未知美人

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands