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 :

Comment faire pour que mon application puisse travailler sur les Android 4.xx ?


Sujet :

Android

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Comment faire pour que mon application puisse travailler sur les Android 4.xx ?
    Salut à tous.
    J'ai développé une application qui communique avec une base de données en ligne et je constate que sur les Android version 2.xx ça fonctionne normalement. Par contre, sur les Android version 4.xx, ça ne fonctionne pas. Quelqu'un pourrait m'aider. Merci d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 149
    Points : 196
    Points
    196
    Par défaut
    C'est que t'as un problème dans ton code.

  3. #3
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 793
    Points
    4 793
    Par défaut
    ça ne fonctionne pas
    Tu peux poster la partie du code qui doit se connecter avec la base et nous montrer où cela ne fonctionne pas ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Décris également en quoi ça ne fonctionne pas. Peut-être as-tu un logcat à nous fournir ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut voici un exemple de code qui marche sur mon émulateur et les android version 2 et qui crash avec les version 4
    Citation Envoyé par Népomucène Voir le message
    Tu peux poster la partie du code qui doit se connecter avec la base et nous montrer où cela ne fonctionne pas ?
    Ce code est censé m'affiché "Landry" dans le TextView; ce qui est le cas avec les android version 2.
    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
    66
    67
    68
    69
    70
    71
    72
    public class Miseenligne extends Activity {
     
    	// déclarer l’URL du fichier employes.json
    		private static String url = "http://infoortb.byethost10.com/emissionradio.php";
    		String result = null;
    	    InputStream is = null;
    	    JSONObject json_data=null;
    	    TextView txt;
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_miseenligne);
            txt=(TextView)findViewById(R.id.t1);
            maconnexion_internet();
     
        }
     
        public void maconnexion_internet()
    	{
    		 try{
    		     //commandes httpClient
    		     HttpClient httpclient = new DefaultHttpClient();
    		        HttpPost httppost = new HttpPost(url);
     
    		        //httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    		        HttpResponse response = httpclient.execute(httppost);
    		        HttpEntity entity = response.getEntity();
    		        is = entity.getContent();
     
    		    }
    		     catch(Exception e){
    		      Log.i("taghttppost",""+e.toString());
    		       }
     
    		 try {
    				 //conversion de la réponse en chaine de caractère
    			    try
    			    {
    			     BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
     
    			     StringBuilder sb  = new StringBuilder();
     
    			     String line = null;
     
    			     while ((line = reader.readLine()) != null) 
    			     {
    			     sb.append(line + "\n");
    			     }
     
    			     is.close();
     
    			     result = sb.toString();
    			    }
    			    catch(Exception e)
    			    {
    			     Log.i("tagconvertstr",""+e.toString());
    			    }
    			    JSONArray jArray = new JSONArray(result);
    			    for(int i = 0; i < jArray.length(); i++){
    				// récupérer un employé de type JSONObject
    					json_data = jArray.getJSONObject(i);
    					String n3=""+json_data.getString("auteur");
    					txt.setText(n3);
    				}
    				} catch (JSONException e) 
    				{
    				e.printStackTrace();
    				}
    	}
     
    }

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut voici un exemple de code qui marche avec les version 2 et qui crash avec les version 4
    Citation Envoyé par joel.drigo Voir le message
    Salut,

    Décris également en quoi ça ne fonctionne pas. Peut-être as-tu un logcat à nous fournir ?
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    public class Miseenligne extends Activity {
     
    	// déclarer l’URL du fichier employes.json
    		private static String url = "http://infoortb.byethost10.com/emissionradio.php";
    		String result = null;
    	    InputStream is = null;
    	    JSONObject json_data=null;
    	    TextView txt;
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_miseenligne);
            txt=(TextView)findViewById(R.id.t1);
            maconnexion_internet();
     
        }
     
        public void maconnexion_internet()
    	{
    		 try{
    		     //commandes httpClient
    		     HttpClient httpclient = new DefaultHttpClient();
    		        HttpPost httppost = new HttpPost(url);
     
    		        //httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    		        HttpResponse response = httpclient.execute(httppost);
    		        HttpEntity entity = response.getEntity();
    		        is = entity.getContent();
     
    		    }
    		     catch(Exception e){
    		      Log.i("taghttppost",""+e.toString());
    		       }
     
    		 try {
    				// récupérer la liste de tous les employés
    				//employes = json.getJSONArray(TAG_EMPLOYES);
     
    				   //conversion de la réponse en chaine de caractère
    			    try
    			    {
    			     BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
     
    			     StringBuilder sb  = new StringBuilder();
     
    			     String line = null;
     
    			     while ((line = reader.readLine()) != null) 
    			     {
    			     sb.append(line + "\n");
    			     }
     
    			     is.close();
     
    			     result = sb.toString();
    			    }
    			    catch(Exception e)
    			    {
    			     Log.i("tagconvertstr",""+e.toString());
    			    }
    			    JSONArray jArray = new JSONArray(result);
    			    for(int i = 0; i < jArray.length(); i++){
    				// récupérer un employé de type JSONObject
    					json_data = jArray.getJSONObject(i);
    					String n3=""+json_data.getString("auteur");
    					txt.setText(n3);
    				}
    				} catch (JSONException e) 
    				{
    				e.printStackTrace();
    				}
    	}
     
    }
    Nom : Sans titre.jpg
Affichages : 221
Taille : 285,5 Ko

  7. #7
    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
    Normal


    Essaye de remonter ton code et voir ce qu'il se passe si une exception est lancée dans maconnexion_internet (au passage pas de '_' dans les identifiants Java) pendant l'execution de la requête HTTP...
    On a une exception... on arrive dans le catch() qui fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.i("taghttppost",""+e.toString());

    Au passage, c'est quoi ce truc....
    e.toString() est une String ... pourquoi concaténer avec "" avant ?
    Sinon ce n'est pas du tout comme ça qu'on log une exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.e("taghttppost","Erreur pendant le post:",e);
    donnera des résultats plus convaincants


    Et ensuite ? et ben on continue...
    Donc ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
    avec is qui est null toujours ....
    Et bim => NullPointerException
    Catchée... on se retrouve dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Log.i("tagconvertstr",""+e.toString());
    (voir remarques ci-dessus).

    Et .... on continue !!!!!! avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JSONArray jArray = new JSONArray(result);
    et result qui est null....
    Et bim => NullPointerException encore.... pas catchée cette fois... c'est une runtime (erreur de programmeur), et le programme s'arrête.
    (a noter que si le JSON n'est pas bon on a encore un probleme)

    Donc... commentaire #1: Revoir la gestion des exceptions en JAVA.

    Tout le code en question pourrait être simplement remplacé par:
    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
     
    // UN SEUL TRY/CATCH  si une exception est lancée *tout* foire !
    try{
           //commandes httpClient
           HttpClient httpclient = new DefaultHttpClient();
           HttpPost httppost = new HttpPost(url);
     
           //httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
           HttpResponse response = httpclient.execute(httppost);
           HttpEntity entity = response.getEntity();
     
           // ouais, on utilise les super classes à notre disposition !
           String entityStr = EntityUtils.toString(entity,"UTF-8");
     
           JSONArray jArray = new JSONArray(result);
           for(int i = 0; i < jArray.length(); i++) {
             // récupérer un employé de type JSONObject
             json_data = jArray.getJSONObject(i);
             String n3=""+json_data.getString("auteur");
             txt.setText(n3);
           }
    } catch (Exception e)  {
         Log.e("maconnexion_internet","Erreur de récupération des données",e);
    }


    Bon... ceci étant fait ...


    Il y a un règle de base en programmation: on ne fait pas de traitement potentiellement lent durant une réaction d'interface (ce qui est le cas dans 99% des fonctions issues du framework android, et en particulier onCreate de l'activité).
    Quand on dit "potentiellement long" c'est n'importe quoi qui dure plus de quelques centièmes de secondes ! Hors une connexion internet fait largement partie de ce cas (le serveur peut être surchargé, et on peut compter facilement 1 minute le temps que la connexion soit refusée).
    Comme *beaucoup* de programmeurs ne comprenaient pas cet état de fait. Google a rajouté une protection à partir de Android 3.0: un accès internet pendant le thread UI (donc le onCreate) lance automatiquement une exception "NetworkOnMainThreadException", forçant ceux-ci (les programmeurs ci-dessus) à utiliser les outils de multi-threading à leur disposition à savoir: Loaders ou AsyncTask (ma préférence allant à ce dernier).

    A mon sens ils devraient faire de même pour les accès aux fichiers (que ce soit directement ou par database).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Un sincère merci à vous tous.
    Un sincère merci à vous tous. Mais toujours je n'arrive pas à récupérer un seul mot de ma base de donné.
    et sans vouloir vous offensé, je voudrais comprendre aussi la raison pour laquelle xa marche sur certain
    android et par sur d'autre. voici mon script PHP.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    // on se connecte à notre base  pour recuperer les data
    $base = mysql_connect ('localhost', 'root', '');  
    mysql_select_db ('info_manager_ortb', $base) ;  
    $req =mysql_query("SELECT libelleemissionradio,dateemissionradio,auteur FROM emissionradio_ortb order by date desc");
    while ($row=mysql_fetch_array($req)) {    
        $output[]=$row;    
    } 
    //on encode en JSON 
    print(json_encode($output));
    mysql_free_result ($req);  
    ?>

  9. #9
    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
    Pour les deux raisons de mon message précédent:

    Mauvaise manière de programmer (rien à voir avec le php) => ca marche sous 2.0, ca plante sous Android 3.0+ (NetworkOnMainThreadException)
    Mauvaise gestion des exceptions => on sait pas ce qui se passe, et ça fait juste un NullPointerException à la sortie.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Merci pour l'attention que vous m'accordez. Quand j'ai copier le code que vous m'avez corrigé

    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
    // UN SEUL TRY/CATCH  si une exception est lancée *tout* foire !
    try{
           //commandes httpClient
           HttpClient httpclient = new DefaultHttpClient();
           HttpPost httppost = new HttpPost(url);
     
           //httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
           HttpResponse response = httpclient.execute(httppost);
           HttpEntity entity = response.getEntity();
     
           // ouais, on utilise les super classes à notre disposition !
           String entityStr = EntityUtils.toString(entity,"UTF-8");
     
           JSONArray jArray = new JSONArray(result);
           for(int i = 0; i < jArray.length(); i++) {
             // récupérer un employé de type JSONObject
             json_data = jArray.getJSONObject(i);
             String n3=""+json_data.getString("auteur");
             txt.setText(n3);
           }
    } catch (Exception e)  {
         Log.e("maconnexion_internet","Erreur de récupération des données",e);
    }

    Le même problème persiste. Ou ce n'est pas un bon code en général. (Je l'ai eu à travers les recherches sur google). S'il vous plait aidez moi.

  11. #11
    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
    Oui mais là le logcat devrait contenir plus d'information....


    Il y a deux choses à faire:
    * Modifier le code afin d'avoir les bonnes informations (c'est le code ci-dessus).

    * Faire en sorte que le code ne soit pas executé par une opération UI (onCreate, onClick , ...): voir les AsyncTask pour cela.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2015
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Merci à tous, les AsyncTask m'ont été d'une grande utilité.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/04/2009, 20h47
  2. Réponses: 3
    Dernier message: 14/01/2009, 17h54
  3. Réponses: 0
    Dernier message: 29/07/2008, 14h02
  4. Comment faire pour que mon image devienne un lien
    Par pierrot10 dans le forum Général JavaScript
    Réponses: 38
    Dernier message: 25/06/2007, 20h49
  5. Réponses: 3
    Dernier message: 24/04/2007, 19h45

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