Я пишу простое приложение для Android, которое общается с полноценным веб-сервисом, размещенным на движке приложений Google.Веб-сервис разработан с использованием фреймворка Restlet.Вот подробности моей среды:
- Сторона сервера: Restlet v2.0.3 для GAE
- Сторона Android: Restlet v2.0.3 для
- Android Android: v2.2 Уровень API 8
В моем AndroidManifest.xml помещено следующее разрешение:
<uses-permission android:name="android.permission.INTERNET" />
Сначала, когда я разрабатывал веб-службу на своем локальном сервере разработкиЯ смог получить доступ к этому веб-сервису из клиента Restlet моего приложения для Android без проблем.
Несколько дней назад я загрузил свой сервис в appspot GAE и перекомпилировал свое приложение для Android с этим новым URL-адресом.,Однако на этот раз мое приложение, похоже, вообще не подключается к этому веб-сервису.Он пытается подключиться и блокирует примерно минуту или около того и выдает эту ошибку в logcat:
12-27 15:14:52.856: ERROR/MyActivity(362): Internal Connector Error (1002) - The calling thread timed out while waiting for a response to unblock it.
12-27 15:14:52.856: ERROR/MyActivity(362): at org.restlet.resource.ClientResource$1.invoke(ClientResource.java:1648)
12-27 15:14:52.856: ERROR/MyActivity(362): at $Proxy7.getAvailableItems(Native Method)
12-27 15:14:52.856: ERROR/MyActivity(362): at com.example.activities.MyActivity$1.run(MyActivity.java:94)
Я вызываю следующий метод веб-службы на GAE:
@Get
GetItemsResponse getAvailableItems(ItemCategory itemCategory);
Более того, я делаю это на стороне Android для привязки к веб-сервису:
ClientResource clientResource = new ClientResource(myServiceUri);
return clientResource.wrap(ItemsResource.class);
Обратите внимание, что веб-сервис на основе appspot работает нормально.Я могу получить доступ к сервису из браузера снаружи.Он также правильно обслуживает файл .jsp, который является частью моей войны приложений, и я могу его использовать.
С другой стороны, в то время, когда приложение Android пытается подключиться к этому сервису, яя даже не вижу ни одного входящего запроса журнала в моей панели appspot.Похоже, что Android-запрос по какой-то причине даже не достигает GAE.
Вот как я делаю вызов веб-службы на стороне Android ...
- Звонок в Интернетобслуживание происходит в потоке с приоритетом по умолчанию.
- Этот поток создается и запускается в методе onStart моей основной деятельности.
- Между тем,Я отображаю диалог прогресса в потоке пользовательского интерфейса.
- Как только поток получает какой-либо ответ от веб-службы, он обновляет SharedPreferences с определенным значением.Если вызов возвращает какую-либо ошибку, он регистрирует эту ошибку и затем обновляет SharedPreferences со значением по умолчанию.
- Это вызывает моего слушателя SharedPreferences .Затем он отменяет диалоговое окно выполнения и отображает основной пользовательский интерфейс.
С тех пор, как я переместил этот сервис в appspot, поток всегда возвращается с исключением, которое я упомянул выше.
Я делаючто-то здесь не так?Почему происходит сбой вызова этой службы, когда я получаю к ней доступ из appspot?Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
-Кальян Акелла