Как отправить объекты с Android на сервлет? - PullRequest
0 голосов
/ 13 июня 2011

Я смотрю на отправку объектов через http от клиента Android на мой сервер, на котором запущены сервлеты Java.Объект может содержать растровое изображение, и мне просто интересно, не могли бы вы показать мне пример отправки объекта с клиента на сервер.

Я читаю на формах, которые люди говорят использовать JSON, но мне кажется, что JSON работает только с текстовыми данными.Если нет, может кто-нибудь показать мне, как использовать его с объектами, содержащими изображения

Ответы [ 4 ]

2 голосов
/ 13 июня 2011

Для отправки двоичных данных между клиентом Java и сервером Java, подключенным по HTTP, у вас есть в основном 2 варианта.

  1. Сериализуйте его, т. Е. Пусть объект реализует Serializable, получит точную копию файла .class с обеих сторон, отправит его по ObjectInputStream и прочитает его по ObjectInputStream. Преимущество: смехотворно легко. Недостаток: плохая обратная совместимость (когда вы изменяете объект для добавления нового поля, вам нужно написать очень много дополнительного кода и проверок для обеспечения обратной совместимости) и плохое повторное использование (не может быть повторно использовано на других клиентах / серверах, чем Java) .

  2. Использовать HTTP multipart/form-data. Advandage: очень совместимый (веб-стандарт) и очень хорошая возможность повторного использования (сервер можно использовать повторно на других клиентах, а клиент можно использовать на других серверах). Недостаток: сложнее реализовать (к счастью, есть API и библиотеки для этого). В Android вы можете использовать встроенный HttpClient API для его отправки. В Servlet вы можете использовать Apache Commons FileUpload для его анализа.

1 голос
/ 25 ноября 2011

Я рекомендую вам использовать XStream

XStream для вашей стороны сервлета: http://x -stream.github.io / tutorial.html

Код XStream, оптимизированный для Android: http://jars.de/java/android-xml-serialization-with-xstream

Если вы отправляете изображения и тому подобное, оберните их в класс 'envelope', который содержит байтовый массив, подобный приведенному здесь: Сериализация и десериализация android.graphics.Bitmap в Java

Затем используйте HttpClient в своем приложении для Android, чтобы отправить данные сервлету ^ ^ Также убедитесь, что и приложение, и сервлет имеют одинаковые классы ^ ^

0 голосов
/ 02 сентября 2012

Вот код для удара по сервлету и отправки данных на сервер.

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;
}
0 голосов
/ 07 февраля 2012

Socket Api тоже хорошо.Создание сокета с обеих сторон позволит отправлять необработанные данные из клиентского приложения Android на сервер.

...