Aller au contenu

Recommended Posts

Posté(e)

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

                          {

                         

                                .....

                          }

                         

 

Posté(e)

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?

Posté(e)

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

Posté(e)

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)

Posté(e)

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

Posté(e)

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? 

Posté(e)

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

Posté(e)

RAAHH!!  :wacko:

 

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

 

Retentes stp:

SELECT nom FROM produit WHERE mat_active = 'ABAMECTINE'
Posté(e)

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.

Posté(e)

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

Posté(e)

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]

Posté(e)

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

     }

  }

 

}

Posté(e)

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

Posté(e)

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

Posté(e)

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
Posté(e)

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?

Posté(e)

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

  • 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...