7
votes

ASYNCHTTPEQUEST POST POST PAS NE PAS DÉCLIGUER DES CETTIRES (Android-ASYNC-HTTP PAR LOOPJ)

J'essaie d'envoyer un message à un serveur à l'aide d'un bibliothèque HTTP ASYNC . Le code suivant est joli standard mais je ne peux pas le faire fonctionner.

J'ai débogué un peu et j'ai vérifié ce qui suit: p>

  • L'URL est correcte. LI>
  • Les paramètres sont corrects et ils sont enregistrés correctement dans la variable des params. li> ul>

    Il apparaît que lorsque httpreesponse réponse = client.execute (demande, contexte); code> est appelé dans asynchtptecrest.makerequest () code> La demande ne contiennent des paramètres suivants: p>

    EDIT: FORT> Après avoir examiné le code un peu plus, il semble que les paramètres de poste puissent être inclus dans l'entité ou le groupe d'headers. P>

    p>

    mais le vrai problème est que je ne reçois pas de Callbacks (voir code ci-dessous). L'instruction si code> après le client.execute () code> appel n'est jamais appelé (le point d'arrêt n'est pas déclenché). P>

    RequestParams params = new RequestParams();
    params.put("loginid", "user");
    params.put("password", "pass");
    params.put("deviceid", "deviceid");
    
    AsyncHttpClient client = new AsyncHttpClient();
    client.post(MDSettings.BASE_URL + "/user/login", params, new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(String response) {
            Log.d(MDSettings.TAG, "MDConnectionManager - login - response: " + response);
            singleton.connectionSuccessful(response, returnIndex);
        }
    
        @Override
        public void onFailure(Throwable error, String content) {
            Log.d(MDSettings.TAG, "MDConnectionManager - login - content: " + content);
            singleton.connectionFailed("Login Failed", error.getMessage(), returnIndex);
        }
    });
    


4 commentaires

Est-il possible de discuter de certains concernant ce fichier utilisateur / login ??


Que veux-tu savoir? Je ne pense pas que vous ayez besoin de voir autre chose que cela puisque je ne vois pas le message log.d () qui signifie le olfsuccess () et et OnFailure () Les rappels ne sont pas appelés.


Juste parce que quelque temps, la réponse JSON n'est pas générée à cause de paramètres non valides, donc je vous le demande. Il suffit d'aller au creux avec votre code de service une fois de plus :)


Il n'y a pas de Json, c'est tout XML mais je ne demande aucune sorte de JSON analysé. Je cherche à obtenir un texte clair.


4 Réponses :


0
votes

Eh bien, je ne sais rien de cette bibliothèque, mais pourquoi ne pas essayer de faire quelque chose de similaire à celui-ci, en utilisant des masques d'asynchronisation? Par exemple, vous pouvez sous-classer l'asyncaptage d'asyncaptage et lui fournir une URL qu'elle chargée. Une autre solution consiste à assurer la sous-classement d'asyncaptage et à lui fournir un objet appelable. Cette approche vous permettra de généraliser cette classe la rendant appropriée pour effectuer différentes tâches de longue date, pas seulement des demandes de réseau. Les deux méthodes peuvent utiliser une interface avec des rappels (ONSUCCESS, OnFailure). Et dans Onpostexecutemethod, vous pouvez déterminer s'il y avait une erreur lors de l'exécution de la tâche ou non et fournit un rappel à la nécessité.


1 commentaires

Si seulement je devais faire un poste normal, j'aurais fait exactement ce que vous avez dit, mais dans une étape ultérieure du projet, j'ai également besoin d'envoyer des fichiers (assez gros). J'aimerais utiliser une bibliothèque pour cela si possible.



0
votes

ici dans votre code, vous appelez directement la réponse à partir de la méthode postale. Premièrement: xxx

dans la ligne suivante Il suffit d'ajouter une méthode d'obtention xxx

alors u obtenir une réponse de celui-ci


1 commentaires

Je dois obtenir la réponse du poteau, pas de l'obtention (qui me donnera une erreur XML).



1
votes

Essayez ce simple extrait.

Ceci fonctionne sur mon appareil. p>

IT imprime "l'échec" comme poste n'est pas autorisé (Statut HTTP: 405) P>

AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("q", "google");

client.post("http://google.com", params, new AsyncHttpResponseHandler(){
     public void onSuccess(String arg0) {
         Log.d("TAG", "Success");        
     };                                      

     public void onFailure(Throwable arg0, String arg1) {
         Log.d("TAG", "Failure");        
     }; 
}); 


2 commentaires

J'ai essayé ce code et cela ne fait rien du tout (tout comme mon propre code). Il semble presque que je ne puisse pas me connecter à Internet.


J'ai choisi cette réponse pour la prime parce que cela m'a aidé à trouver le problème (pas de connexion Internet en raison d'une entrée d'autorisations supprimée).



3
votes

Il semble que mon android.permission.Internet a été supprimé du fichier manifeste. Après l'avoir ajouté à nouveau, tout a fonctionné comme prévu. Chaque fois que quelque chose ne fonctionne pas, je vais vérifier mes autorisations.


1 commentaires

merci, je viens de retourner à Android après un an et oublie cette permission :)