【问题标题】:android asynchronous interaction with serverandroid与服务器的异步交互
【发布时间】:2013-08-08 13:52:42
【问题描述】:

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

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

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

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

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

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

我可以同时更改应用程序的服务器和安卓部分

提前谢谢你!

【问题讨论】:

  • 为什么不能直接从服务器向客户端发送消息?
  • 是的,我的问题是……我该怎么做?
  • 使用此答案 (stackoverflow.com/questions/3696986/…) 了解如何为您的请求发送响应(如果您不知道)。然后简单地创建并发送响应,如“PROCESSING”、“DONE”等

标签: android rest asynchronous


【解决方案1】:

这就是Google Cloud Message 的用途,服务器通知一个或多个设备有新的东西要从服务器获取。手机调用服务器以获取所有新信息并进行处理

另一种选择是使用xmpp,看看asmack

【讨论】:

  • 或者她可以通知一个或多个设备有来自 HER 服务器的新内容。=)
  • 这不是不必要的麻烦吗?
  • 它与使用 xmpp 并没有什么不同,可能更可靠,因为一切都由谷歌处理
  • 我已经尝试过这种方法,很抱歉,但 GCM 并没有真正起作用......即它不稳定 - 不会立即发送消息,经常延迟发送(接收消息下班后...)
  • @tania 我们在我的工作中使用它每天发送数千条推送消息,我们没有任何问题。另一个选择是 xmpp
【解决方案2】:

您可以使用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[]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2019-01-16
    • 1970-01-01
    • 2018-03-06
    • 2013-01-03
    相关资源
    最近更新 更多