Я провел некоторую отладку, и вот что получается:
по умолчанию, реализация на Android выбирает HTTP-клиента Apache для выполнения низкоуровневой передачи.Код там минимален и выглядит так, как будто он неправильно устанавливает Content-Type и Content-Length запроса.Запрос выходит, но некоторые (большинство) разборчивых веб-серверов пропускают тело.Похоже, веб-серверы Google справляются с этим нормально.Таким образом, кажется, что он отлично работает для серверов Google, но не для других веб-серверов (это немного странно, но это выходит за рамки моей проблемы).
по умолчаниюна Java java.net.HttpURLConnection выбирается для низкоуровневого http-транспорта.Эта реализация более многословна и аккуратно устанавливает все необходимые поля.Content-Length здесь, также как Content-Type и все остальные поля.Контент JSON сериализуется, и все веб-серверы счастливы.Включая мое пользовательское приложение GAE.
Итак, на Android следующий обходной путь решает проблему:
Поставьте следующий вызов:
HttpTransport.setLowLevelHttpTransport (new com.google.api.client.javanet.NetHttpTransport ());
ДО того, как вы выполните request.execute()
Таким образом, на Android вы 'будем использовать транспорт, который действительно работает (формируется более аккуратный запрос).
ps.Как это часто бывает в жизни, я ленился, задавал вопрос, надеясь, что кто-нибудь решит его за меня.Закончил отладку и решил ее сам ПЛЮС пришлось написать все это.Дополнительная работа - но я думаю, для всех остальных это выгодно.Надеюсь, что другие найдут это полезным.
пс.2.google api java клиент теперь рулит;) Спасибо авторам за выставление хорошей работы.