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 :

[db.query] Recherche dynamique


Sujet :

Android

  1. #1
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut [db.query] Recherche dynamique
    Bonsoir ,

    J'aurais besoin d'une aide pour une chose qui me semble extremement simple ... (en théorie , mais en pratique je suis un poisson en bocal il semblerais ^^)

    Faire un EditText + un bouton + une listview

    Dans le EditText rentrer un "titre" et le passer au moment du clique button dans ma request SQL.

    J'ai essayer de faire une chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public Cursor recupererLaListeDesProduits(){
    		return db.query("produits", new String[]{
    				"_id",
    				"codebarre",
    				"titre",
    				"description"				
    				},null, null, "_id" + " LIKE " + editText1.getText(), "titre", null, null);
    	}
    Mais cela ne marche pas ... si vous auriez un exemple simple à me montrer.
    Quand je met en static cela marche et me sort que l'article voulu.mais en dynamique (je piétine bêtement je le sent),au passage du contenu de l'editText vers la request sql ..


    Je vous remercie ,
    Cordialement ,

  2. #2
    Membre très actif
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2009
    Messages : 135
    Par défaut
    voila un exemple qui permet de recupere des info
    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
     
    public ArrayList<String> getInfo() {
    	ArrayList<String> output = new ArrayList<String>();
     
    	String[] colonnesARecup = new String[] { "CREATOR" ,"DATEC" ,"DATEM"};
     
    	Cursor cursorResults = bdd.query(TABLE_COLLECTOR, colonnesARecup, null,
    			null, null, null, "CREATOR", null);
    	if (null != cursorResults) {
    		if (cursorResults.moveToFirst()) {
    			do {
    				int columnIdxNom = cursorResults.getColumnIndex("CREATOR");
    				int columnIdxPrenom = cursorResults.getColumnIndex("DATEC");
    				int columnIdxDate = cursorResults.getColumnIndex("DATEM");
    						//.getColumnIndex("prenom");
    				String nomDb = cursorResults.getString(columnIdxPrenom)
    						+ " \n" +"\n"+ cursorResults.getString(columnIdxNom)
    						+ " \n" +"\n"+ cursorResults.getString(columnIdxDate);
    				output.add(nomDb);
    			} while (cursorResults.moveToNext());
    		} // end§if
    	}
     
     
    	return output;
    }

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut
    Merci de ta réponse tabbabi,

    D'après ce que je comprend de ton code , cela va prendre les 3collones que tu as déclaré ("CREATOR" ,"DATEC" ,"DATEM").

    Mais je ne vois pas à quel moment tu fait l'appel du contenu de l'editText.

    Ce que je cherche à faire est une requête avec une chose de ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     WHERE "creator" LIKE editText.getText.toString()
    Mais le passage de mon contenu de editText ne marche pas, je pense que comme il sont sur 2 Class différente je doit passer le contenu via une chose du style PutExtra ?

  4. #4
    Membre très actif
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mars 2009
    Messages : 135
    Par défaut
    tu peux passer un parametre dans la métohde ,par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public ArrayList<String> getInfo(String edittext)
    et dans la classe ou tu fait l'appel à cette méthode
    tu vas faire comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String edittext= editText.getText.toString();
    ArrayList<String> data1=new ArrayList<String>();
               data1=collectorBdd.getCreator(edittext);

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut
    Merci de ta réponse que je n'ai pas réussi à mettre en place..

    Voila mon Main :
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    import java.io.IOException;
    import java.util.ArrayList;
    import android.app.AlertDialog;
    import android.app.ListActivity;
    import android.content.DialogInterface;
    import android.database.SQLException;
    import android.os.Bundle;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.util.Log;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.AutoCompleteTextView;
    import android.widget.ListView;
     
    public class Main extends ListActivity implements View.OnClickListener {
     
    	private static final String TAG = "montag";
    	private Personne[] lv_arr = {};
    	private ArrayAdapter<Personne> arrayAD ;
    	private AutoCompleteTextView filterText;
     
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            DataBaseHelper dbhelp = new DataBaseHelper(this);
     
            try {
    			dbhelp.createDataBase();
    		} catch (IOException e) {
    			Log.e(TAG, "unable to create db");	
    		}
     
            try {
            	dbhelp.openDatabase();
            }catch (SQLException sqle){
            	throw sqle;
            }
     
            ArrayList<Personne> listPersonne = new ArrayList<Personne>();
            listPersonne = dbhelp.getAllPersonne();
     
            filterText = (AutoCompleteTextView) findViewById(R.id.mon_filtre);
            filterText.addTextChangedListener(filterTextWatcher);
     
            affichage(listPersonne);
     
            dbhelp.close();
        }
     
        protected void onListItemClick(ListView l, View v, int position, long id) {
            super.onListItemClick(l, v, position, id);
     
            AlertDialog.Builder adb=new AlertDialog.Builder(Main.this);
            adb.setTitle("Information sur la personne");
            adb.setMessage("Information sur : \n"+l.getItemAtPosition(position));
            adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    				public void onClick(DialogInterface dialog, int which) {
       				} });
            adb.setIcon(R.drawable.info);
            adb.show();
    }
     
    	private void affichage(ArrayList<Personne> listPers) {
     
    		lv_arr = (Personne[])listPers.toArray(new Personne[0]);
    		Log.e(TAG, "value of lv_arr " +lv_arr.toString());
    		arrayAD = new ArrayAdapter<Personne>(this, R.layout.affichage, lv_arr);
    		setListAdapter(arrayAD);
     
    }
     
     
    	private TextWatcher filterTextWatcher = new TextWatcher() {
     
    		@Override
    		public void onTextChanged(CharSequence s, int start, int before, int count) {
    			 arrayAD.getFilter().filter(s);	
    		}
     
    		@Override
    		public void beforeTextChanged(CharSequence s, int start, int count,
    				int after) {
    		}
     
    		@Override
    		public void afterTextChanged(Editable s) {			
    		}
    	};
    	@Override
    	protected void onDestroy() {
    		super.onDestroy();
    		Log.e(TAG, "onDestroy() called");
    		filterText.removeTextChangedListener(filterTextWatcher);
    	}
    	@Override
    	public void onClick(View arg0) {	
    	}
    }
    Cela marche avec l'autocomplexion mais cela est trop long et j'ai du mal a mettre en place une progressdialog pour faire patienté du coup on a l'impression que l'application ne fait rien pendant 10sec le temps de la recherche.

    N'y a t'il pas un tutoriel simple , editText + bouton + BDD quelques part ?!
    La plupart des exemples que j'ai vue son tous issu d'une autocomplexe recherche :S !!!

    Merci beaucoup ,

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    Juste pour la ProgressDialog un petit exemple qui je pense doit fonctionner :

    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
     
    import java.io.IOException;
    import java.util.ArrayList;
    import android.app.AlertDialog;
    import android.app.ListActivity;
    import android.content.DialogInterface;
    import android.database.SQLException;
    import android.os.Bundle;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.util.Log;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.AutoCompleteTextView;
    import android.widget.ListView;
     
    public class Main extends ListActivity implements View.OnClickListener {
     
        private static final String TAG = "montag";
        private Personne[] lv_arr = {};
        private ArrayAdapter<Personne> arrayAD;
        private AutoCompleteTextView filterText;
        private ProgressDialog mProgressDiag;
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            filterText = (AutoCompleteTextView) findViewById(R.id.mon_filtre);
            filterText.addTextChangedListener(filterTextWatcher); 
     
            new QueryTask().execute();
        }
     
        protected void onListItemClick(ListView l, View v, int position, long id) {
            super.onListItemClick(l, v, position, id);
     
            AlertDialog.Builder adb=new AlertDialog.Builder(Main.this);
            adb.setTitle("Information sur la personne");
            adb.setMessage("Information sur : \n"+l.getItemAtPosition(position));
            adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                       } });
            adb.setIcon(R.drawable.info);
            adb.show();
        }
     
        private class QueryTask extends AsyncTask<Void, Void, ArrayList<Personne>> {
            @Override
            protected void onPreExecute () {
                mProgressDiag = ProgressDialog.show(Main.this, "", "Chargement en cours...", true);            
            }                
     
            @Override
            protected ArrayList<Personne> doInBackground(Void... params) {
                DataBaseHelper dbhelp = new DataBaseHelper(this); 
                try {
                    dbhelp.createDataBase();
                } catch (IOException e) {
                    Log.e(TAG, "unable to create db");    
                }         
                try {
                    dbhelp.openDatabase();
                }catch (SQLException sqle){
                    throw sqle;
                }
                ArrayList<Personne> listPersonne = new ArrayList<Personne>();
                listPersonne = dbhelp.getAllPersonne();
                dbhelp.close();
                return listPersonne;
            }
     
            @Override
            protected void onPostExecute(ArrayList<Personne> listPers) {
                mProgressDiag.dismiss();
                lv_arr = (Personne[])listPers.toArray(new Personne[0]);
                arrayAD = new ArrayAdapter<Personne>(this, R.layout.affichage, lv_arr);
                setListAdapter(arrayAD);
            }
        }
     
     
        private TextWatcher filterTextWatcher = new TextWatcher() {
     
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                 arrayAD.getFilter().filter(s);    
            }
     
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
            }
     
            @Override
            public void afterTextChanged(Editable s) {            
            }
        };
        @Override
        protected void onDestroy() {
            super.onDestroy();
            Log.e(TAG, "onDestroy() called");
            filterText.removeTextChangedListener(filterTextWatcher);
        }
        @Override
        public void onClick(View arg0) {    
        }
    }
    Sinon pour la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    String[] projection = new String[] {
    "_id",
    "codebarre",
    "titre",
    "description"};
     
    // Where clause
    String selection = "creator LIKE ?";
     
    String[] selectionArgs = new String[1];
    selectionArgs[0] =  editText.getText.toString();
    // dans cet exemple pas de group by, pas de having et pas d'order by
    db.query("produits", projection, selection, selectionArgs, null, null, null)
    Si j'avais rajouté des "AND" ou des "OR", il suffit d'augmenter la taille du tableau "selectionArgs" et de le renseigner (chaque ? est remplacé par la valeur dans le tableau correspondant à l'indice de la position du ? dans la selection).

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 385
    Par défaut
    Bonjour , merci pour ta réponse , pour la progressbar j'ai des erreurs :
    Ligne : 58
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DataBaseHelper dbhelp = new DataBaseHelper(this);
    il me propose de changer le context en une query.

    et au niveau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     lv_arr = (Personne[])listPers.toArray(new Personne[0]);
                arrayAD = new ArrayAdapter<Personne>(this, R.layout.affichage, lv_arr);
    Surlignage rouge mais pas d'explication.

    Je vais essayer de voir si je trouve..

    Cordialement ,

  8. #8
    Membre expérimenté
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par défaut
    Pour la première erreur j'ai copié sans réfléchir, il faudrait mettre "Main.this", puisque c'est une InnerClass (elle à pas accès au contexte directement).

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/06/2007, 20h28
  2. query datasource dynamique
    Par moulery dans le forum Bases de données
    Réponses: 4
    Dernier message: 03/05/2007, 15h14
  3. FORMULAIRES - Recherche dynamique
    Par Gunther dans le forum IHM
    Réponses: 3
    Dernier message: 06/12/2006, 09h12
  4. Réponses: 5
    Dernier message: 13/11/2005, 19h10

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