android与服务器的异步交互

时间:2013-08-08 13:52:42

标签: android rest asynchronous

我正在开发一个客户端 - 服务器android应用程序,它使用REST协议。

基本上我首先将图片上传到服务器,然后在服务器上处理它,然后在android应用程序中更新这张图片的状态(从新到处理);

因此用户需要按“刷新”以从服务器接收已更新的已处理图片列表...

我肯定不喜欢它......

在服务器完成处理后是否可以进行某种回调? 我想我有点像...... ajax,换句话说,服务器需要触发 更新列表的事件,不是用户按“刷新”按钮。 我也不想在发送图片后每隔约2秒询问服务器是否已经处理过......我认为必须有更优雅的解决方案。

实现此类功能的正确方法是什么?

我可以更改应用程序的服务器和android部分

提前谢谢你!

2 个答案:

答案 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 arrayBitmap转换为byte[]