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

API standards et tierces Android Discussion :

Test connexion réseau


Sujet :

API standards et tierces Android

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut Test connexion réseau
    Bonjour à tous,
    je développe une appli qui se connecte a une base de données distante.
    Je souhaiterais que lorsque le serveur est injoignable ou qu'il n y a pas de connexion réseau l'appli affiche un toast plutot que planté.

    Comment procéder?
    Voici ma fonction qui se connecte au serveur et effectue une requete :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
      public JSONArray getJSONFromUrl(String Url, String param) {
    	    // Making HTTP request
    		  JSONArray jarray = null;
    		  try { 
    		    	url1 = new URL(Url);
    		      	httpUrl = (HttpURLConnection)url1.openConnection();
    		      	httpUrl.setDoOutput(true);
    		      	httpUrl.setRequestMethod("POST");
     
    		      	httpUrl.setConnectTimeout(10000);
    		      	urlParametres = param;
    		      	Log.d("param", urlParametres);
    		      	writer = new OutputStreamWriter(httpUrl.getOutputStream());
    		      	if(urlParametres != null && urlParametres != ""){
    		      		writer.write(urlParametres);
    		      	}
     
    				writer.flush();
    				writer.close();
     
    		    } catch (UnsupportedEncodingException e) {
    		    	e.printStackTrace();
    		    } catch (ClientProtocolException e) {
    		    	e.printStackTrace();
    		    } catch (IOException e) {
    		    	e.printStackTrace();
    		    }
    		    try {
    		    	Log.d("coonexion",""+getState());
    		    	if(httpUrl.getResponseCode() == 200){
    		    		in = new BufferedInputStream(httpUrl.getInputStream());
    		    		json = readStream(in);
    		    		Log.d("longueur", ""+json.length());
    		    		if(json.length() > 2){
    				    	//Log.d("texte json",json);
    				    	jarray = new JSONArray(json);
    		    		}
    		    		else{
    		    			Log.d("retour","vide");
    		    			jarray = new JSONArray();
    		    		}
    		    	}else{
    	    			Log.d("connexon","echec");
    		    	}
    		    } catch (Exception e) {
    		    	Log.e("Buffer Error", "Error converting result " + e.toString());
    		    }
     
    	    return jarray;
      }
    VOici ma classe qui effectue le traitement de la requete
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    	public class JSONParse extends AsyncTask<String, Integer, JSONArray> {
    		JSONArray jsonArray;
    		ProgressDialog progress;
    		@Override
    		protected void onProgressUpdate(Integer... values){
    			super.onProgressUpdate(values);
    		}
     
    		public JSONParse(){
    		}
     
    	    @Override
    	    protected void onPreExecute() {
    	          super.onPreExecute();
    	          progress = new ProgressDialog(getActivity());
    	          progress.setMessage("Ce ne sera pas long ... Normalement");
    	          progress.show();
    	          checkInternetConenction();
    	    }
     
    	    @Override
    	      protected JSONArray doInBackground(String... args) {
    	 	   JSONParser jParser = new JSONParser();
    	      // Getting JSON from URL
    	 		   jsonArray = jParser.getJSONFromUrl(url, param);
    	 		   Log.d("taille ja", ""+jsonArray.length());
    	 		  Log.d("etat doIn", ""+jParser.getState());
    	      return jsonArray;
     
    	    }
     
    	     @Override
    	     protected void onPostExecute(JSONArray json) {
    	    		json = jsonArray;
    	    		Log.d("la",""+json.length());
    	    		if(json.length()>0){
    	    			int id = 0;
    	    			extras = new Bundle();
    	    			for(int i=0;i<json.length();i++){
    		        		try {
    		        			JSONObject e = json.getJSONObject(i);
    		        			if(e != null){
    		        				id = e.getInt("id_utilisateur");
    		        				nom= e.getString("nom");
    		        				editor.putString("nom", nom);
    		        				editor.putInt("id", id);
    		        			}
    						} catch (JSONException e1) {
    							// TODO Auto-generated catch block
    							e1.printStackTrace();
    						}
    		        	}
    	    			if (progress.isShowing()) {
    	                    progress.dismiss();
    	                }
    	    			editor.commit();
    	    			extras.putInt("id", id);
    	    			Intent RechercheActivite = new Intent(getActivity(), MainActivity.class);
    	    			RechercheActivite.putExtras(extras);
    	    			startActivity(RechercheActivite);
    	    		}
    	    		else{
    	    			Toast.makeText(getActivity(), "id ou mdp incorrect", Toast.LENGTH_SHORT).show();
    	    		}
        	}
    Merci d'avance!
    PS: je suis au Canada et vais donc me coucher (3h du matin) donc désolé si il y a des réponses rapides et que je ne répond pas

  2. #2
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    Bonjour,

    Ne serait-il pas possible de "catcher" l'erreur qui fait planter l'application avec un try and catch ? Et sinon lorsque l'application crash, quelle est l'erreur (la stack) que la console t'affiche ?
    Madness ? THIS IS JAVA !!!
    SPARTAN ! What is your programming language ? JAVA ! JAVA ! JAVA !
    Code well, code readable, code in Allman style !

    N'oubliez pas de cliquer sur si ce commentaire vous a été utile et aussi sur si cela a... résolu ton problème !

  3. #3
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Je t'invite à revoir la gestion des exceptions.
    (et bim...repub: http://nicroman.developpez.com/tutor...id/exceptions/ )


    Par exemple la fonction suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public JSONArray getJSONFromUrl(String Url, String param)
    Quelles sont les préconditions ? Si ces préconditions ne sont pas remplies (UnsupportedEncodingException sur l'URL par exemple), comment la fonction remonte-t-elle l'erreur à l'appelant ?
    Quelles sont les postconditions ? Si ces postconditions ne peuvent être remplies par la fonction (erreur réseau par exemple), comment la fonction remonte-t-elle l'erreur à l'appelant ?

    D'après la déclaration ci-dessus, la fonction est sensée *toujours* marcher ! (donc aucune précondition / postcondition).
    Quelle que soit "Url" (au passage une variable ne doit pas commencer par une majuscule), même avec "steam://1567778987q1154/df1a345"... la fonction doit renvoyer un JSONArray correct, ce qui n'est bien entendu pas le cas.
    Donc il manque forcément des déclaration de "throws".

    Même à l'intérieur de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    try {
       partie 1
    } catch (Exception e) {
       e.printStackTrace();
    }
    try {
       partie 2
    } catch (Eception e) {
       e.printStackTrace();
    }
    Ce genre de code veut dire:
    si la partie 1 échoue (exception): on passe sous silence l'exception (e.printStackTrace(), lui préférer Log.e(TAG,"message",e); au passage sous Android), mais la fonction peut continuer sur la partie 2.
    si la partie 2 échoue (exception): on passe sous silence l'exception (voir ci-dessus), mais c'est pas grave, la fonction a quand même réussi.

    Si l'execution de la partie 2 dépend de la partie 1 ... le code devrait être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try {
       partie 1
       partie 2
    } catch (Exception e) {
       Log.e(TAG,"message",e);
    }

    En général, il ne faut jamais faire de try/catch. Et préférer la remontée d'exception (déclaration throws de la fonction). Le seul moment on l'on doit utiliser try/catch est quand:
    * On peut gérer le cas de l'exception (exception "attendue") et utiliser un autre algorithme dans ce cas.
    * On veut traduire un exception en une autre (par exemple une JSONException en IOException, ne pas oublier de conserver l'exception originelle en "cause").
    * On ne peut plus passer l'exception à l'appelant (fonction principale du framework, genre onClick, ou d'un thread, fonction "run", ou d'une AsyncTask, fonction "doInBackground"). Dans ces cas là, on récupère l'exception, et on la traduit dans un message compréhensible par l'utilisateur d'une part, et on la log (pour le développeur) d'autre part.

    A noter qu'on peut utiliser try/finally par contre pour fermer des ressources ouvertes à l'intérieur d'un try.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 278
    Points : 63
    Points
    63
    Par défaut
    Bonjour,
    Merci pour vos réponse.
    L'erreur qui m'est retournée quand le wi-fi plante c'est "failed to connect 192.168x.x network unreachable"

    Voila ma classe qui gère la connection:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    public class JSONParse extends AsyncTask<String, Integer, JSONArray> {
    		JSONArray jsonArray;
    		ProgressDialog progress;
    		@Override
    		protected void onProgressUpdate(Integer... values){
    			super.onProgressUpdate(values);
    		}
     
    		public JSONParse(){
    		}
     
    	    @Override
    	    protected void onPreExecute() {
    	          super.onPreExecute();
    	          progress = new ProgressDialog(getActivity());
    	          progress.setMessage("Ce ne sera pas long ... Normalement");
    	          progress.show();
    	          //checkInternetConenction();
    	    }
     
    	    @Override
    	      protected JSONArray doInBackground(String... args) {
    	 	   JSONParser jParser = new JSONParser();
    	      // Getting JSON from URL
    	 		   jsonArray = jParser.getJSONFromUrl(url, param);
    	 		   Log.d("taille ja", ""+jsonArray.length());
    	 		  Log.d("etat doIn", ""+jParser.getState());
    	      return jsonArray;
     
    	    }
     
    	     @Override
    	     protected void onPostExecute(JSONArray json) {
    	    		json = jsonArray;
    	    		Log.d("la",""+json.length());
    	    		if(json.length()>0){
    	    			int id = 0;
    	    			for(int i=0;i<json.length();i++){
    		        		try {
    		        			JSONObject e = json.getJSONObject(i);
    		        			if(e != null){
    		        				id = e.getInt("id_utilisateur");
    		        				nom= e.getString("nom");
    		        				editor.putString("nom", nom);
    		        				editor.putInt("id", id);
    		        			}
    						} catch (JSONException e1) {
    							// TODO Auto-generated catch block
    							e1.printStackTrace();
    						}
    		        	}
    	    			if (progress.isShowing()) {
    	                    progress.dismiss();
    	                }
    	    			editor.commit();
    	    			Intent RechercheActivite = new Intent(getActivity(), MainActivity.class);
    	    			startActivity(RechercheActivite);
    	    		}
    	    		else{
    	    			Toast.makeText(getActivity(), "id ou mdp incorrect", Toast.LENGTH_SHORT).show();
    	    		}
        	}
    Je vais essayer devoir avec ce qui m'a été dis.

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Novembre 2014
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Novembre 2014
    Messages : 67
    Points : 86
    Points
    86
    Par défaut
    Salut,

    Je suppose que c'est la ligne jsonArray = jParser.getJSONFromUrl(url, param); qui lève cette exception. Dans ce cas effectivement, récupère le nom de l'exception levée et encapsule là dans un try catch

Discussions similaires

  1. Test Connexion Lecteur Réseau
    Par lito74 dans le forum Access
    Réponses: 1
    Dernier message: 23/06/2007, 20h39
  2. Test connexion réseau
    Par guen dans le forum Access
    Réponses: 1
    Dernier message: 19/04/2006, 00h22
  3. Services Oracle ne démarre pas sans connexion réseau??
    Par dreamanoir dans le forum Oracle
    Réponses: 6
    Dernier message: 22/02/2005, 00h44
  4. Connaître l'état d'une connexion réseau
    Par SteelBox dans le forum Windows
    Réponses: 8
    Dernier message: 29/07/2004, 12h30
  5. API MySQL - Connexion réseau
    Par klael dans le forum Bases de données
    Réponses: 3
    Dernier message: 18/03/2004, 09h25

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