Intereting Posts
FragmentPagerAdapter getItem не вызывается Пропустили 60 кадров! Приложение может слишком много работать над своей основной нитью Как преобразовать имена цветов в эквивалентный шестнадцатеричный код? Есть ли способ компактной памяти в андроиде, чтобы снизить знак высокой воды? Элементы списка с закругленными углами Dpi по умолчанию «большой», «средний» и «малый» текстовые представления андроида Android Custom Component View с закругленными углами Как вы переопределяете модуль / зависимость в модульном тесте с Dagger 2.0? Загрузите изображение с Android на Amazon S3? Невозможно разобрать массив Json с использованием Gson Как заблокировать телефон от зарядки через USB программно FindViewById внутри статического метода Android logcat регистрирует только информационный уровень на реальном устройстве. Не удается получить отладочные сообщения, даже необработанные исключения Проблема OpenGL на Android Как создать меню программно в Android?

Azure MobileServicePushFailedException на Android

Я пытаюсь создать приложение с offline sync и следовать руководству по Azure

Теперь offline storage работает хорошо, но на сервер не добавляются никакие элементы со следующим исключением:

  Error syncAsync com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException java.util.concurrent.ExecutionException: com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:299) at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:286) at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116) at irisrecognition.example.com.irisrecognition.util.ItemManager$5.doInBackground(ItemManager.java:237) at irisrecognition.example.com.irisrecognition.util.ItemManager$5.doInBackground(ItemManager.java:232) at android.os.AsyncTask$2.call(AsyncTask.java:288) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) Caused by: com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException at com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext.pushOperations(MobileServiceSyncContext.java:939) at com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext.consumePushSR(MobileServiceSyncContext.java:834) at com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext.access$1100(MobileServiceSyncContext.java:85) at com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext$PushSyncRequestConsumer.run(MobileServiceSyncContext.java:1127) 

Вот код для onCreate()

  try { mClient = new MobileServiceClient( Constants.ROOT_URL, "kfogvaexzeDLYyPbRmBiHxQEBUYpku30", this).withFilter(new ProgressFilter()); initLocalStore().get(); syncAsync(); refreshItemsFromTable(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } 

И еще …

 private AsyncTask<Void, Void, Void> initLocalStore() throws MobileServiceLocalStoreException, ExecutionException, InterruptedException { AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { try { mPullQuery = mClient.getTable(IrisEntry.class).where().orderBy("__createdAt", QueryOrder.Descending); MobileServiceSyncContext syncContext = mClient.getSyncContext(); SQLiteLocalStore localStore = new SQLiteLocalStore(mClient.getContext(), "OfflineStore", null, 1); SimpleSyncHandler handler = new SimpleSyncHandler(); Map<String, ColumnDataType> tableDefinition = new HashMap<String, ColumnDataType>(); tableDefinition.put("id", ColumnDataType.String); tableDefinition.put("text", ColumnDataType.String); tableDefinition.put("device", ColumnDataType.String); tableDefinition.put("segmentationAlgo", ColumnDataType.String); tableDefinition.put("imageUri", ColumnDataType.String); tableDefinition.put("containerName", ColumnDataType.String); tableDefinition.put("resourceName", ColumnDataType.String); tableDefinition.put("sasQueryString", ColumnDataType.String); tableDefinition.put("userId", ColumnDataType.String); tableDefinition.put("complete", ColumnDataType.Boolean); localStore.defineTable(Constants.TABLE_IRIS, tableDefinition); syncContext.initialize(localStore, handler).get(); mIrisTable = mClient.getSyncTable(IrisEntry.class); } catch (final Exception e) { e.printStackTrace(); } return null; } }; return runAsyncTask(task); } public void syncAsync() { if (isNetworkAvailable()) { new AsyncTask<Void, Void, Void>() { @Override protected Void doInBackground(Void... params) { try { mClient.getSyncContext().push().get(); mIrisTable.pull(mPullQuery).get(); Log.e(LOGTAG, "Success syncAsync"); } catch (Exception e) { Log.e(LOGTAG, "Error syncAsync " + e.getMessage()); e.printStackTrace(); } return null; } }.execute(); } else { Log.e(LOGTAG, "You are not online, re-sync later!"); } } private boolean isNetworkAvailable() { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); return activeNetworkInfo != null && activeNetworkInfo.isConnected(); } 

Разрешения для моей таблицы разрешены с помощью Application Key . Есть идеи?

РЕДАКТИРОВАТЬ:

Это отображается в файле журнала на сервере:

 ERROR { [Error: getaddrinfo ENOTFOUND] code: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo' } 

Solutions Collecting From Web of "Azure MobileServicePushFailedException на Android"

Я не уверен, является ли это ответом, но «Constants.ROOT_URL» включает строку заголовка протокола, например « http://myurl.com »? Ошибка ENOTFOUND означает, что адрес вызова getaddrinfo не был разрешен. Вы можете попробовать «myurl.com», без части протокола URI. Также для этого метода требуется тип класса Uri для аргумента. Похоже, вы можете получить трассировку стека из обработчика MalformedURIException. (Вероятно, этот вызов использует https, даже если вы указали что-то еще).

Насколько я понял, проблема в том, что мои таблицы настроены на Anonmyous Access . Я установил их Authenticated Only для Authenticated Only и синхронизация снова работала нормально. В любом случае, я хочу, чтобы некоторые таблицы были доступны без аутентификации (прочитано всеми пользователями) и собирались проверить, могу ли я как-то исправить это