Azure MobileServicePushFailedException en Android

Estoy tratando de construir una aplicación con offline sync y siguió el tutorial sobre Azure

Ahora el offline storage funciona bien, pero no se agrega ningún elemento al servidor con la siguiente excepción:

  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) 

Aquí está el código de 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(); } 

Y algo más…

 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(); } 

Los permisos para mi tabla están configurados para permitir con la Application Key . ¿Algunas ideas?

EDITAR:

Esto aparece en el archivo de registro en el servidor:

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

No estoy seguro de si esta es la respuesta, pero "Constants.ROOT_URL" incluye la cadena de encabezado del protocolo como " http://myurl.com "? El error ENOTFOUND significa que la dirección de la llamada getaddrinfo no pudo resolverse. Youmay quiere probar "myurl.com", sin la parte del protocolo de la URI. También el método requiere un tipo de clase Uri para el argumento. Parece que podría estar obteniendo la traza de pila desde el controlador MalformedURIException. (Es probable que la llamada se utilice https incluso si especificó algo más).

Por lo que me di cuenta, el problema es que mis tablas están configuradas para Anonmyous Access . Los fijé a Authenticated Only y la sinc. Estaba trabajando muy bien otra vez. De todas formas quiero que se acceda a algunas tablas sin autenticación (leída por todos los usuarios) y voy a comprobar si puedo arreglar eso de alguna manera

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.