2017-10-05 3 views
0

Je suis en train d'écrire un plugin personnalisé qui fait des choses lourdes dans le code derrière. De temps en temps je veux envoyer une mise à jour de progrès afin que je puisse l'afficher dans Ionic. Je ne pouvais pas trouver la méthode appropriée dans CallbackContext. L'envoi de rappel de succès n'est possible qu'une seule fois. Comment puis-je parvenir à envoyer des rappels de progression?Cordova Android plugin envoyer plusieurs rappels (progression)

private void doHeavyStuff(final CallbackContext callbackContext){ 

    something.execute(new ResponseHandler() { 

      @Override 
      public void onProgress(String message) { 
       callbackContext.success(message); //what else ? 
      } 

      @Override 
      public void onFailure(String message) { 
       callbackContext.error(message); 
      } 

      @Override 
      public void onSuccess(String message) { 
       callbackContext.success(message); 
      } 
    }); 
} 

Répondre

2

Vous pouvez utiliser setKeepCallback() pour arrêter l'instance de rappel en cours de suppression sur l'appel, ce qui lui permet d'être appelé plusieurs fois:

public boolean execute(String action, JSONArray data, CallbackContext callbackContext) throws JSONException { 
    if(action.equals("doHeavyStuff"){ 
     // Start doing async heavy stuff... 

     // Preserve callback 
     PluginResult pluginResult = new PluginResult(PluginResult.Status.NO_RESULT); 
     pluginResult.setKeepCallback(true); 
     callbackContext.sendPluginResult(pluginResult); 
     return true; 
    } 
} 

private void doHeavyStuff(final CallbackContext callbackContext){ 
    something.execute(new ResponseHandler() { 
     @Override 
     public void onProgress(String message) { 
      PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, message); 
      pluginResult.setKeepCallback(true); // keep callback 
      callbackContext.sendPluginResult(pluginResult); 
    } 

     @Override 
     public void onFailure(String message) { 
      callbackContext.error(message); 
     } 

     @Override 
     public void onSuccess(String message) { 
      callbackContext.success(message); 
     } 
    }); 
} 
+0

Merci de partager cela! +1 – David

+0

désolé pour une réponse tardive - Votre approche fonctionne bien! – Anthea