繁体   English   中英

如何将对象从 android 发送到 servlet?

[英]How to send objects from android to servlet?

我正在考虑通过 http 将对象从 android 客户端发送到运行 java Z43468E1058EE6CEB0D44 的服务器 object 可以保存 bitmap 图像,我只是想知道您是否可以向我展示一个将 object 从客户端发送到服务器的示例。

我在 forms 上读到人们说要使用 JSON,但在我看来 JSON 仅适用于文本数据。 如果没有,有人可以告诉我如何将它与包含图像的对象一起使用

要在 Java 客户端和通过 HTTP 连接的 Java 服务器之间发送二进制数据,您基本上有 2 个选项。

  1. 对其进行序列化,即让 object 实现Serializable ,在两边都有.class文件的精确副本,并通过ObjectInputStream发送并通过ObjectInputStream读取。 优点:非常容易。 缺点:向后兼容性差(当您更改 object 以添加新字段时,您必须编写大量额外的代码和检查以确保向后兼容性)和可重用性差(在 Java 之外的其他客户端/服务器上不可重用) .

  2. 使用 HTTP multipart/form-data 优点:非常兼容(web 标准)和非常好的可重用性(服务器可在其他客户端上重用,客户端可在其他服务器上重用)。 缺点:更难实现(幸运的是有这方面的 API 和库)。 在 Android 中,您可以使用内置的HttpClient API 发送它。 在 Servlet 中,您可以使用Apache Commons FileUpload来解析它。

我推荐你使用 XStream

servlet 端的 XStream: http://x-stream.github.io/tutorial.html

针对 Android 优化的 XStream 代码: http://jars.de/java/android-xml-serialization-with-xstream

If you are sending images and such, wrap them into a 'envelope' class that contains a byte array like the one here: Serializing and De-Serializing android.graphics.Bitmap in Java

然后在您的 android 应用程序中使用 HttpClient 将数据发送到您的 servlet ^ ^ 还要确保应用程序和 servlet 具有相同的类 ^ ^

这是用于访问 servlet 并将数据发送到服务器的代码。

boolean hitServlet(final Context context, final String data1,final String data2) {
    String serverUrl = SERVER_URL + "/YourSevletName";
    Map<String, String> params = new HashMap<String, String>();
    params.put("data1", data1);
    params.put("data2" data2)
    long backoff = BACKOFF_MILLI_SECONDS + random.nextInt(1000);
    // As the server might be down, we will retry it a couple
    // times.
    for (int i = 1; i <= MAX_ATTEMPTS; i++) {
        try {
            post(serverUrl, params);
            return true;
        } catch (IOException e) {
            // Here we are simplifying and retrying on any error; in a real
            // application, it should retry only on unrecoverable errors
            // (like HTTP error code 503).
            Log.e(TAG, "Failed " + i, e);
            if (i == MAX_ATTEMPTS) {
                break;
            }
            try {
                Log.d(TAG, "Sleeping for " + backoff + " ms before retry");
                Thread.sleep(backoff);
            } catch (InterruptedException e1) {

                // Activity finished before we complete - exit.
                Log.d(TAG, "Thread interrupted: abort remaining retries!");
                Thread.currentThread().interrupt();
                return false;
            }
            // increase backoff exponentially
            backoff *= 2;
        }
    }

    return false;
}

插座 Api 也不错。 在双方创建套接字将允许将原始数据从客户端 android 应用程序传输到服务器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM