lolitta

filtre des données entre les spinners

20 messages dans ce sujet

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

                          {

                         

                                .....

                          }

                         

 

Partager ce message


Lien à poster
Partager sur d’autres sites

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?

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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)

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

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? 

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

RAAHH!!  :wacko:

 

La colonne se nomme "mat_active" et pas "mat-active". 

 

Retentes stp:

SELECT nom FROM produit WHERE mat_active = 'ABAMECTINE'

Partager ce message


Lien à poster
Partager sur d’autres sites

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?

Partager ce message


Lien à poster
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.

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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]

Partager ce message


Lien à poster
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();

     }

  }

 

}

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
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

Partager ce message


Lien à poster
Partager sur d’autres sites

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?

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

L'url n'existe pas ou elle ne renvoie rien du tout (java.io.FileNotFoundException: http//....) 

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !


Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.


Connectez-vous maintenant