lolitta Posté(e) 25 janvier 2016 Share Posté(e) 25 janvier 2016 Bonjour Cest la premiere fois que je crée une application android et je dois développer une application de filtre des données, j ai crée deux spinners qui récupèrent les données a partir d une BDD sql avec le client URLConnection et json exemple: le premier spinner contient la liste des categories et le deuxième la liste des produits, et si je sélectionne une categorie, je devrait avoir just la liste des produits qui ont la categorie selectionnée, j ai réussi a afficher toutes les listes mais j arrive pas a faire le filtre voici le model de mon code j ai crée 2 spinners j ai crée 2 adapters et j ai placé un ecouteur j ai fait le test avec les positions mais je pense que ca ne marche pas puisque on doit recuperer tous les produits d'une categorie qui a une position X , je suis un peu perdu ; svp si ya quelqun qui a une idée , svp aidez moi sp.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() { @@override public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { // TODO Auto-generated method stub if(parent.getItemAtPosition(pos).toString().equals("categorie1")) { ...... } else if(parent.getItemAtPosition(pos).toString().equals("produit1")) { ..... } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gob0 Posté(e) 25 janvier 2016 Share Posté(e) 25 janvier 2016 Salut, Lors de la sélection la liste des catégorie, tu dois modifier la query pour utiliser la valeur de la liste puis mettre à jour la liste de produits. A quoi ressemble a query pour obtenir les produits? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lolitta Posté(e) 26 janvier 2016 Auteur Share Posté(e) 26 janvier 2016 bonjour et merci pour ta reponse, quand j'ai fait la requete sql, elle naccepte pas la condition where alors ma requete sql etait simple SELECT * FROM produit et quand j 'essaye de rajouter le where le spinner ne ramene aucune donnée et comme le where ne marche pas alors j ai pensé a faire le filtre dans le code java en recuperant la position de la categorie selectionné puis trouver le produit coresependant mais aussi cette solurion n'est pas assez credible puisque une categorie n'a pas qu'un seul produit mais plusieurs Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gob0 Posté(e) 26 janvier 2016 Share Posté(e) 26 janvier 2016 Quelle base de données utilises-tu? Tu peux donner ta requête et le nom de la table et des colonnes? Filtre les données après requête, c'est loin d'être performant (c'est comme remplir ton chariot au pif à l'hypermarché puis rejeter les produits au moment de les mettre dans le frigo) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lolitta Posté(e) 26 janvier 2016 Auteur Share Posté(e) 26 janvier 2016 jutilise une bdd sql, et les données je les recuperent en ligne, <?php include("Connection.php"); $result=mysqli_query($connect,"SELECT nom FROM produit WHERE mat-act = 1"); while($e=mysqli_fetch_array($result, MYSQLI_ASSOC)) $output[]=$e; { ?> <?php } print(json_encode($output)); $mysqli->close(); ?> j ai essayé avec cette methode mais le WHERE ne marche pas voici un extrait de ma table produit Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gob0 Posté(e) 26 janvier 2016 Share Posté(e) 26 janvier 2016 sur le screenshot, il n'y a pas de colonne "mat-act", c'est normal? Essayes la query suivante: SELECT nom FROM produit WHERE mat-active = 'ABAMECTINE' Est-ce que tu obtiens des produits? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lolitta Posté(e) 26 janvier 2016 Auteur Share Posté(e) 26 janvier 2016 oui c exacte mai quand je rajoute mat-active = 'ABAMECTINE' ,il naffiche rien quand je fais SELECT nom FROM produit il affiche la liste des produits mais quand j essaye de faire une condition WHERE rien ne saffiche elle existe la colonne mat-active Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gob0 Posté(e) 26 janvier 2016 Share Posté(e) 26 janvier 2016 RAAHH!! :wacko: La colonne se nomme "mat_active" et pas "mat-active". Retentes stp: SELECT nom FROM produit WHERE mat_active = 'ABAMECTINE' Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lolitta Posté(e) 26 janvier 2016 Auteur Share Posté(e) 26 janvier 2016 j ai retenté mais ca ne marche pas a mon avis ca doit etre la syntaxe de json qui est imcomplete, sinon vous dites quoi? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gob0 Posté(e) 26 janvier 2016 Share Posté(e) 26 janvier 2016 Avant de se pencher sur la syntaxe du JSON et sa désérialisation en Java, je ferais ceci: 1- se connecter sur l'interface de la BDD (phpmyadmin?) et tester la query (la dernière que j'ai donné) -> Si le résultat n'est pas correct, il faut contrôler les noms de table et colonnes. 2- dans un navigateur, appeler l'url du script PHP. Normalement le résultat JSON est affiché. Puis coller le résultat dans le site http://jsonlint.com/ pour valider la syntaxe. -> Si le résultat n'est pas affiché ni le message d'erreur, regarder dans les logs PHP 3- dans l'app android, afficher dans la log le résultat retourné par URLConnection (sans le parser). Normalement c'est le même que celui retourné par le script PHP. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lolitta Posté(e) 26 janvier 2016 Auteur Share Posté(e) 26 janvier 2016 excusez moi; je sais que jai insisté trop sur ce sujet Les étapes que vous avez citer je les ai toutes faites et j ai appeler mon fichier php avec URLConnection et le resultat s'affiche correctement si la requete sql etait du genre (SELECT..FROM) =>le resultat sur interface android= au resultat php mais le probleme quand je rajoute la condition WHERE a ma requete sql (SELECT ..FROM..WHERE)le resultat du script php saffiche correcte mais dans l interface android c est vide . je n ai pas compris pourquoi cette difference Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gob0 Posté(e) 26 janvier 2016 Share Posté(e) 26 janvier 2016 T'excuses pas, le but d'un forum c'est quand même de s'entraider -_- Par contre, tu donnes peu d'infos donc c'est compliqué de t'aider. Est-ce que tu peux donner le code qui récupère les données (avec URLConnection)? [tu peux remplacer le nom du serveur par www.xxx.yy] Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lolitta Posté(e) 26 janvier 2016 Auteur Share Posté(e) 26 janvier 2016 ok voici le code qui recupére les données public class produit extends ActionBarActivity { ArrayList<String> listItems=new ArrayList<String>(); ArrayAdapter<String> adapter; HttpURLConnection urlConnection = null; Spinner sp1; Button button2; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_matiere); sp1=(Spinner)findViewById(R.id.spinner6); adapter=new ArrayAdapter<String>(this,R.layout.spin_layout,R.id.text,listItems); sp1.setAdapter(adapter); button2=(Button)findViewById(R.id.button10); button2.setOnClickListener(new Button.OnClickListener(){ public void onClick(View arg0) { String message1=sp1.getSelectedItem().toString(); Intent intent=new Intent(); intent.putExtra("MESSAGE",message1); setResult(3,intent); finish(); } }); } public void onStart(){ super.onStart(); BackTask bt=new BackTask(); bt.execute(); } private class BackTask extends AsyncTask<Void,Void,Void> { ArrayList<String> list; protected void onPreExecute(){ super.onPreExecute(); list=new ArrayList<String>(); } protected Void doInBackground(Void...params){ InputStream is=null; String result=""; try{ URL url = new URL("http://xxxx/yyyy"); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.connect(); is = urlConnection.getInputStream(); }catch(IOException e){ e.printStackTrace(); } //convert response to string try{ BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8")); String line = null; while ((line = reader.readLine()) != null) { result+=line; } is.close(); //result=sb.toString(); }catch(Exception e){ e.printStackTrace(); } // parse json data try{ JSONArray jArray =new JSONArray(result); for(int i=0;i<jArray.length();i++){ JSONObject jsonObject=jArray.getJSONObject(i); // add interviewee name to arraylist list.add(jsonObject.getString("nom")); } } catch(JSONException e){ e.printStackTrace(); } return null; } protected void onPostExecute(Void result){ listItems.addAll(list); adapter.notifyDataSetChanged(); } } } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gob0 Posté(e) 26 janvier 2016 Share Posté(e) 26 janvier 2016 Modifies ton code comme suit: - remplace urlConnection.connect(); is = urlConnection.getInputStream(); + par urlConnection.connect(); urlConnection.setUseCaches(false); urlConnection.setDefaultUseCaches(false); urlConnection.setIfModifiedSince(0); is = urlConnection.getInputStream(); - remplace // parse json data try{ + par // parse json data Log.i("MONAPP-", "JSON="+result); try{ Ensuite, tu fais deux tests: 1- tu mets la query SELECT nom FROM produit dans ton script PHP et tu regardes le résultat dans la console Android 2- tu remplaces la query par SELECT nom FROM produit WHERE mat_active = 'ABAMECTINE' dans ton script PHP et tu regardes le résultat dans la console Android Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lolitta Posté(e) 27 janvier 2016 Auteur Share Posté(e) 27 janvier 2016 bonjour ; je viens de faire les modifs que vous m'avez suggerer pour le premier test ca marche et je voix les données dans ma console android et pour le deuxieme test, le probleme persiste toujours, le script php affiche le resultat de ma requete mais dans la console android il n affiche rien c comme si il na pas compris bonjour, jai refait le test puisque j ai fait une petite erreur, donc voila just apres run the application, il affiche SORRY, the applcation has stopped puis il fait la redirection vers l activity davant Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lolitta Posté(e) 27 janvier 2016 Auteur Share Posté(e) 27 janvier 2016 okkk voici les deux codes le primeir avec une simple requete <?php include("Connection.php"); $result=mysqli_query($connect,"SELECT nom FROM produit"); while($e=mysqli_fetch_array($result, MYSQLI_ASSOC)) $output[]=$e; { ?> <?php } echo (json_encode($output)); $mysqli->close(); ?> et le deuxieme: <?php include("Connection.php"); $result=mysqli_query($connect,"SELECT nom, mat_active FROM produit WHERE mat_active='ABAMECTINE'"); while($e=mysqli_fetch_array($result, MYSQLI_ASSOC)) $output[]=$e; { ?> <?php } echo (json_encode($output)); $mysqli->close(); ?> je pene toujours que le probleme vient du script java et non pas du php Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lolitta Posté(e) 27 janvier 2016 Auteur Share Posté(e) 27 janvier 2016 salut, voici les erreurs qui s'affiche je pense que le probleme vient du client URLCOnnection car j ai une base de donnée en ligne et pas en local quesque vous en dites? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lolitta Posté(e) 28 janvier 2016 Auteur Share Posté(e) 28 janvier 2016 bonjour, je pourrais pas modifier ma methode a ce niveau de programmation , je prefere contiinuer avec cette idée voici la capture en mode zoom Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gob0 Posté(e) 28 janvier 2016 Share Posté(e) 28 janvier 2016 L'url n'existe pas ou elle ne renvoie rien du tout (java.io.FileNotFoundException: http//....) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lukecage1 Posté(e) 5 septembre 2017 Share Posté(e) 5 septembre 2017 Utilisez cet outil pour valider JSON: JSON Formatter Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.