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 и синхронизация снова работала нормально. В любом случае, я хочу, чтобы некоторые таблицы были доступны без аутентификации (прочитано всеми пользователями) и собирались проверить, могу ли я как-то исправить это