IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Générer une erreur IOException


Sujet :

Android

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 32
    Par défaut Générer une erreur IOException
    Bonjour à toutes et à tous,

    Dans une classe qui étend Asynctask et dans la méthode doInBackground, j'ai un bloc try/catch.

    Dans le bloc try, je fais une requête sur un server distant et attends sa réponse:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try
            {
                Log.i("BIO-WR","in TRY");
                Response response = client.newCall(request).execute();
                serverResponse = response.body().string();
            }
    Dans mon bloc catch:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    catch (IOException e) // IOException occured
            {
                e.printStackTrace();
                Log.i("BIO-WR","ERROR = " + e);
     
                String quit = receiverActivity.getResources().getString(R.string.dialog_sorry);
                Toast.makeText(receiverActivity, quit, Toast.LENGTH_LONG).show();
     
                final Handler handler = new Handler();
                handler.postDelayed(new Runnable()
                {
                    @Override
                    public void run() //wait 2.5 seconds and quit
                    {
                        System.exit(0);
                    }
                }, 2500);
            }
    Donc dans mon bloc catch, je m'excuse avec un Toast, j'attends 2 sec et je termine l'app.
    j'aimerais pouvoir vérifier qu'en cas de problème côté server mon app réagit comme il faut et exécute pour l'instant le bloc catch de test.

    Ma question est, comment puis-je générer ou faire en sorte que le server ne réponde pas (ou mal) et qu'une IOException soit lancée afin que mon bloc catch puisse s'exécuter et que je vois si tout se passe bien comme prévu?

    Merci à toutes et à tous et bon dimanche... De foot!

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Passe le téléphone en mode avion => pas de réseau , il y'a de forte chance que tu es une IOException.

    Ceci étant dit, l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    client.newCall(request).execute();
    ressemble fortement à un appel d'asynctask . Est tu sur que cet appel n'est pas déja asynchrone ? Par ce que si il est asynchrone ton doInbackground se termine instantanément et ta variable response est très certainement vide ou du moins ne contient pas ce que tu attends.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 32
    Par défaut
    Bonjour grunk et bonjour à toutes et à tous,

    Alors concernant l'appel, j'ai repris l'exemple de okHttp:


    Je te donne leur code d'exemple et ils y mettent bien le "client.newCall(request).execute()":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public static final MediaType JSON
        = MediaType.parse("application/json; charset=utf-8");
     
    OkHttpClient client = new OkHttpClient();
     
    String post(String url, String json) throws IOException {
      RequestBody body = RequestBody.create(JSON, json);
      Request request = new Request.Builder()
          .url(url)
          .post(body)
          .build();
      Response response = client.newCall(request).execute();
      return response.body().string();
    }
    Sinon, pour revenir à nos moutons, mon problème est que je ne peux pas vraiment utiliser le mode avion car avant de lancer ma requête, je vérifie bien qu'une connection wifi ou mobile est bien disponible et si ce n'est pas le cas, je ne fais pas de requête et préviens l'utilisateur avec les différentes options possibles.
    Donc ce que j'aimerais c'est un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    try
            {
                Log.i("BIO-WR","in TRY");
     
     
                 generateException(IOException);
     
                 // Une méthode qui générerait une erreur de type passée en paramètre.
     
     
                //Response response = client.newCall(request).execute();
                //serverResponse = response.body().string();
            }
            catch (IOException e) // IOException occured
            {
                e.printStackTrace();
                Log.i("BIO-WR","ERROR = " + e);
            }
    Une méthode ou simplement un moyen de faire ça?

    Merci grunk et merci à toutes et à tous.

  4. #4
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 32
    Par défaut
    À moins que dans mon bloc try et juste avant la requête je coupe la connection, je pourrais faire ça par exemple, qu'en penses-tu / pensez-vous ?

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Si simuler le comportement réel est compliqué pour toi , suffit de lever l'exception dans ton try/catch

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try {
        Log.i("BIO-WR","in TRY");
        throw new IOException("Déclenchement manuel pour test");
        Response response = client.newCall(request).execute();
        serverResponse = response.body().string();
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2011
    Messages : 32
    Par défaut
    Merci grunk,

    Exactement ce que je voulais.

    Bonne soirée à toi!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment générer une erreur suite à une mauvaise saisie
    Par vivevba dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/05/2009, 18h23
  2. Réponses: 3
    Dernier message: 25/02/2009, 18h09
  3. [Système] Générer une erreur 404
    Par Neuromancien2 dans le forum Langage
    Réponses: 6
    Dernier message: 23/01/2008, 11h53
  4. Réponses: 7
    Dernier message: 25/08/2006, 14h15
  5. [PS SQL] générer une erreur en cas de mauvais traitement
    Par Piolet dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/08/2006, 09h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo