我正在开发一个客户端 - 服务器android应用程序,它使用REST协议。
基本上我首先将图片上传到服务器,然后在服务器上处理它,然后在android应用程序中更新这张图片的状态(从新到处理);
因此用户需要按“刷新”以从服务器接收已更新的已处理图片列表...
我肯定不喜欢它......
在服务器完成处理后是否可以进行某种回调? 我想我有点像...... ajax,换句话说,服务器需要触发 更新列表的事件,不是用户按“刷新”按钮。 我也不想在发送图片后每隔约2秒询问服务器是否已经处理过......我认为必须有更优雅的解决方案。
实现此类功能的正确方法是什么?
我可以更改应用程序的服务器和android部分
提前谢谢你!
答案 0 :(得分:0)
这是Google Cloud Message的用途,服务器通知设备或设备从服务器获取新内容。电话拨打服务器以获取所有新信息并进行处理
另一种选择是使用xmpp,看看asmack
答案 1 :(得分:0)
您可以使用droidQuery执行Ajax
请求,其语法与Javascript
类似。它是高度可配置的,因此请查看javadocs以获取帮助(如果您使用过Javascript
,那么您将非常快速地接受)。调用将在后台线程中运行,但回调方法将在主线程上调用。以下是如何执行获得post
响应的JSON
的示例:
$.ajax(new AjaxOptions().url("http://www.example.com")
.type("post")
.dataType("json")
.data(bitmap_bytes)
.context(this)
.success(new Function() {
@Override
public void invoke($ droidQuery, Object... params) {
JSONObject json = (JSONObject) params[0];
//handle json response. Also see $.map(JSONObject) for parsing
}
})
.error(new Function() {
@Override
public void invoke($ droidQuery, Object... params) {
AjaxError e = (AjaxError) params[0];
Log.e("$", "Error: " + e.status + ": " + e.error);
}
}));
如果要添加进度微调器,droidProgress是 droidQuery扩展,可以很容易地与 droidQuery 集成。
此外,您还可以了解如何在converting Java bitmap to byte array将Bitmap
转换为byte[]
。