0

J'applique des services mobiles pour mon application Android afin de me connecter à azure. J'ai exécuté le didacticiel de synchronisation hors connexion et cela fonctionne correctement.MobileServicePushFailedException Azure Android

J'ai maintenant essayé d'implémenter la même méthode dans mon application avec une table différente et j'obtiens une exception de poussée. Chose amusante, c'est qu'il est toujours inséré dans la base de données en ligne. Quelqu'un at-il une idée de pourquoi cela se passe?

En tant que test, j'ai implémenté la même classe, les mêmes tables, etc. dans le projet ToDoItem sans erreur.

Exception ci-dessous

W/System.err: java.util.concurrent.ExecutionException: com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException 
W/System.err:  at com.google.common.util.concurrent.AbstractFuture$Sync.getValue(AbstractFuture.java:299) 
W/System.err:  at com.google.common.util.concurrent.AbstractFuture$Sync.get(AbstractFuture.java:286) 
W/System.err:  at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:116) 
W/System.err:  at com.heathrow.ecms.DatabaseAccess$3.doInBackground(DatabaseAccess.java:2178) 
W/System.err:  at com.heathrow.ecms.DatabaseAccess$3.doInBackground(DatabaseAccess.java:2173) 
W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:292) 
W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
W/System.err:  at java.lang.Thread.run(Thread.java:818) 
W/System.err: Caused by: com.microsoft.windowsazure.mobileservices.table.sync.push.MobileServicePushFailedException 
W/System.err:  at com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext.pushOperations(MobileServiceSyncContext.java:959) 
W/System.err:  at com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext.consumePushSR(MobileServiceSyncContext.java:859) 
W/System.err:  at com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext.access$1100(MobileServiceSyncContext.java:83) 
W/System.err:  at com.microsoft.windowsazure.mobileservices.table.sync.MobileServiceSyncContext$PushSyncRequestConsumer.run(MobileServiceSyncContext.java:1120) 

code pour la synchronisation est exactement le même que dans le tutoriel, mais avec une autre table, l'erreur est sur la ligne de poussée.

private AsyncTask<Void, Void, Void> sync() { 
    AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>(){ 
     @Override 
     protected Void doInBackground(Void... params) { 
      try { 
       MobileServiceSyncContext syncContext = mClient.getSyncContext(); 
       syncContext.push().get(); 
       mtblAttachment.pull(null).get(); 
      } catch (final Exception e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 
    }; 
    return runAsyncTask(task); 
} 
+0

De quel tutoriel parlez-vous? Et utilisez-vous la version 24 ou 25 de l'API? – Mike

+0

@Mike Désolé ce tutoriel [ici] (https://docs.microsoft.com/fr-fr/azure/app-service-mobile/app-service-mobile-android-get-started-offline-data) I ' m en utilisant API 23. – SliderUK

+0

Désolé, je ne connais pas la réponse spécifique, mais il y a un post ici http://stackoverflow.com/questions/35019417/azure-mobileservicepushfailedexception-on-android - peut-être un problème d'authentification? – Mike

Répondre

1

Ok après mon dernier commentaire hier, j'ai résolu le problème.

Les champs SerializedName de votre classe doivent correspondre (sensible à la casse) à ce que vous avez placé dans initLocalDatabase. Même si cette erreur n'apparaissait pas dans mon test sur l'application ToDoItem, elle est apparue lorsque je l'ai implémentée dans mon application actuelle. Par conséquent, si vous obtenez l'exception MobileServicePushFailedException, vérifiez que vos champs SerializedName correspondent à vos noms de champs de base de données locaux. Pour une raison quelconque, cela n'affecte pas les champs de la base de données Azure, c'est pourquoi j'ai vu mes données aller vers Azure mais pas ma base de données locale. Les meilleures pratiques rendent tous les champs exactement les mêmes (pensez que j'étais paresseux à l'époque!).