Aller au contenu

filtre des données entre les spinners


Recommended Posts

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"))

                          {

                         

                                .....

                          }

                         

 

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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]

Lien vers le commentaire
Partager sur d’autres sites

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();

     }

  }

 

}

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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
Lien vers le commentaire
Partager sur d’autres sites

  • 1 year later...

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...