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 :

SQLite passer des données d'une activity à une autre


Sujet :

Android

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Points : 130
    Points
    130
    Par défaut SQLite passer des données d'une activity à une autre
    Bonjour à tou-te-s,

    J'ai créé une ListView qui affiche des données à partir d'une bdd SQLite.
    Lorsque je clique sur un item,un Toast s'affiche avec les données de l'item.
    J'essaie depuis un moment d'ouvrir une autre activité et y afficher les données de l'item mais je n'y arrive pas. La seule chose qui fonctionne est l'ouverture d'une autre activité mais sans donnée. Jje ne sais pas (et je ne comprends pas) comment passer les données d'une activité à l'autre.

    Voici mon activité 1 HadActivity.class
    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
    getListView().setOnItemClickListener(new OnItemClickListener() {
    		public void onItemClick(AdapterView<?> a, View v, int position, long id) {
    			Had hadFromBdd = hadBdd.getHadFromId(id);
     
    			if (hadFromBdd != null) {
    				Toast.makeText(HadActivity.this, hadFromBdd.toString(), Toast.LENGTH_LONG).show();
     
    				Intent i = new Intent(HadActivity.this, HadDetail.class);
    				Cursor c = (Cursor) adapter.getItem(position);
    				i.putExtra("had_id", c.getInt(c.getColumnIndex("_id")));
     
    				startActivity(i);
    				}
    			}
    		});
    Et mon acitivité 2 HadDetails.class
    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
    public void onCreate(Bundle savedInstanceState) {
     
    	super.onCreate(savedInstanceState);
    	setContentView(R.layout.haddetail);
     
    	hadId = getIntent().getIntExtra("had_id", 0);
     
    	// Création d'une instance de ma classe HadBDD
    	final HadBDD db = new HadBDD(this);
    	db.open();
     
    //je doute du cursor. je me dis qu'il devrait récupérer l'id selectionné et non toutes les entrées
    	Cursor cursor = db.getAllHad();
     
    	if (cursor.getCount() == 1) {
    		cursor.moveToFirst();
    	        Log.v(TAG, "Activity State: getString ok()");
    		hadTexte = (TextView) findViewById(R.id.hadTexte);
    			hadTexte.setText(cursor.getString(cursor.getColumnIndex("texte")));
    Je n'ai pas de message d'erreur dans le LogCat. Je pense que je ne suis pas loin du résultat mais je bloque. Voyez-vous mon erreur ? Ma logique n'est pas la bonne ?
    Merci

  2. #2
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 523
    Points
    18 523
    Par défaut
    Déjà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i.putExtra("had_id", c.getInt(c.getColumnIndex("_id")));
    hadId = getIntent().getIntExtra("had_id", 0);
    C'est correct, tu dois bien envoyer un recevoir l'int.

    Par contre faudrait voir la requête dans db.getAllHad() parce que là tu ne lui envois pas d'id, donc c'est un peu normal qu'elle ne te retourne pas la ligne que tu veux.

    Et dans ton onItemClick() :
    c.getInt(c.getColumnIndex("_id"))
    Ne serait pas la même chose qu'id par hasard ?

    Je ne comprend pas exactement ce que tu fais, mais apparemment tu devrais utiliser :
    getHadFromId(id)
    au lieu de getAllHad().

    Tu lui demandes toutes les entrées alors que t'en veux qu'une.
    Keith Flint 1969 - 2019

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Points : 60
    Points
    60
    Par défaut
    salut ,

    Clege , tu devrais passer ton post en résolu....

    Et aussi poster le code final qui fonctionne....ça pourrait en aider d'autre .

    On à vu ça hier ensemble...et c'était réglé.

    Pour info ThierryBenji :

    Le listView n'était pas déclaré, ni remplie d'ailleurs, la classe gérant la base n'était pas correct non plus...

    Voilà

  4. #4
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 605
    Points : 18 523
    Points
    18 523
    Par défaut
    Ah ok... ^^
    Keith Flint 1969 - 2019

  5. #5
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par bruno.getJava() Voir le message
    salut ,

    Clege , tu devrais passer ton post en résolu....

    Et aussi poster le code final qui fonctionne....ça pourrait en aider d'autre .

    On à vu ça hier ensemble...et c'était réglé.

    Pour info ThierryBenji :

    Le listView n'était pas déclaré, ni remplie d'ailleurs, la classe gérant la base n'était pas correct non plus...

    Voilà
    Merci beaucoup pour toute ton aide d'hier. En fait, sauf erreur, nous avons utilisé une autre méthode pour afficher une listview provenant de données extraites de la bdd mais nous n'avons pas passer de données de l'activité1 (listview) à l'activité 2.

    Voici le code:
    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
    public class Had extends Activity{
     
     
    	// declaration des varaibles
    	TestBDD db = new TestBDD(this);
    	ListView hadListView;
     
     
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
     
    		//creation des hadiths
    		db.getWritableDatabase();
     
    		Had had = new Had();
    		had.setTitre("Test Titre 1");
    		had.setTexte("Test Texte 1");
     
    		Had hadith2 = new Had();
    		had2.setTitre("Test Titre 2");
    		had2.setTexte("Test Texte 2");
     
    		db.insertHad(had);
    		db.insertHad(had);
     
     
     
    		//db.close();
     
     
    		hadListView = (ListView) findViewById(R.id.hadListView);
     
     
    		List<Had> hadList = db.getAllHad();
     
    		 // Création de la ArrayList qui nous permettra de remplire la listView
            ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>();
     
            // On déclare la HashMap qui contiendra les informations pour un item
            HashMap<String, String> map;
     
            for (Had had : hadList) {
     
                   // Création d'une HashMap pour insérer les informations du premier
                   // item de notre listView
                   map = new HashMap<String, String>();
     
                   map.put("titre", had.getTitre());
                   map.put("texte", had.getTexte());
     
                   // enfin on ajoute cette hashMap dans la arrayList
                   listItem.add(map);
     
                   db.close(); 
            }
     
            if(hadList.size() == 0){	
            	Toast.makeText(this, "Aucun had enregistré !", Toast.LENGTH_SHORT).show();
            }
     
     
            // Récupération de la listview créée dans le fichier main.xml
            SimpleAdapter mSchedule = new SimpleAdapter(this.getBaseContext(),
                          listItem, R.layout.list, new String[] {"titre", "texte"},
                          new int[] {R.id.textTitre, R.id.textTexte});
            // On attribut à notre listView l'adapter que l'on vient de créer
            hadListView.setAdapter(mSchedule);
     
            }
    }

  6. #6
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par thierrybenji Voir le message
    Déjà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i.putExtra("had_id", c.getInt(c.getColumnIndex("_id")));
    hadId = getIntent().getIntExtra("had_id", 0);
    C'est correct, tu dois bien envoyer un recevoir l'int.
    ok, merci

    Citation Envoyé par thierrybenji Voir le message
    Par contre faudrait voir la requête dans db.getAllHad() parce que là tu ne lui envois pas d'id, donc c'est un peu normal qu'elle ne te retourne pas la ligne que tu veux.
    aaah, okay. Plus logique en effet.

    La requête getAllHad by bruno.getJava
    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
    	public List<Had> getAllHad(){
     
    		List<Had> hadList = new ArrayList<Had>();
     
    		// Select All Query
    		String selectQuery = "SELECT  * FROM " + TABLE_HAD + " ";
     
    		SQLiteDatabase db = this.getWritableDatabase();
    		Cursor cursor = db.rawQuery(selectQuery, null);
     
    		// looping through all rows and adding to list
    		if (cursor.moveToFirst()) {
    			do {
    				Had had = new Had();
    				had.setId(cursor.getInt(NUM_COL_ID));
    				had.setTitre(cursor.getString(NUM_COL_TITRE));
    				had.setTexte(cursor.getString(NUM_COL_TEXTE));
     
    				// Adding sport to list
    				hadList.add(had);
    			} while (cursor.moveToNext());
    		}
    		return hadList;
    }
    La mienne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		public Cursor getAllHad(){
    			Cursor c = bdd.query(TABLE_HAD, new String[]{
    					COL_ID, COL_TEXTE, COL_TITRE},
    					null, null, null, null, null);
    			return c;
    	}
    Citation Envoyé par thierrybenji Voir le message
    Et dans ton onItemClick() :
    c.getInt(c.getColumnIndex("_id"))
    Ne serait pas la même chose qu'id par hasard ?

    Je ne comprend pas exactement ce que tu fais, mais apparemment tu devrais utiliser :
    getHadFromId(id)
    au lieu de getAllHad().

    Tu lui demandes toutes les entrées alors que t'en veux qu'une.
    Le résultat que j'espère est:
    Activity1 (elle fonctionne): une ListView avec affichage de données extraite de la bdd.
    Activity2 : 2 textview avec affichage des données qui était dans l'item cliqué dans l'activity1.

    Ma requête getHadFromId ressemble à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		public Had getHadFromId(long id) {
    			Cursor c = bdd.query(TABLE_HAD, new String[]{COL_ID, COL_TEXTE, COL_TITRE},
    					COL_ID + " LIKE " + id, null,null, null, null);
    			return cursorToHad(c);
    		}
    Je vais peut-être songer à poster tout mon code sur un espace style github.
    Si j'arrive arriver au bout de cet exercice, je me propose à poster un tuto

  7. #7
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par thierrybenji Voir le message
    Et dans ton onItemClick() :
    c.getInt(c.getColumnIndex("_id"))
    Ne serait pas la même chose qu'id par hasard ?
    Je m'embrouille peut-être un peu car j'ai une colonne _id et une colonne id dans ma table (et une colonne TEXTE et une Titre).
    _id car c'est obligatoire
    id est utilisé dans le code de la class
    les deux colonne ont les mêmes valeurs

    Citation Envoyé par thierrybenji Voir le message
    Je ne comprend pas exactement ce que tu fais, mais apparemment tu devrais utiliser :
    getHadFromId(id)
    au lieu de getAllHad().

    Tu lui demandes toutes les entrées alors que t'en veux qu'une.
    Oui tu dois avoir raison.
    Je souhaite récupérer les données de l'item sélectionné et j'utilise l'id.

  8. #8
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Points : 130
    Points
    130
    Par défaut
    Yeahhhh, ça fonctionne (pour le moment ).
    J'ai pas encore tout essayé mais la partie texte passe d'une activité à l'autre.

    Voici ce que j'ai fait dans l'activité1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if (hadFromBdd != null) {
    	Toast.makeText(HadActivity.this, hadFromBdd.toString(), Toast.LENGTH_LONG).show();
     
    	Intent i = new Intent(HadActivity.this, HadDetail.class);
    	Cursor c = (Cursor) adapter.getItem(position);
    	i.putExtra("had_id", c.getInt(c.getColumnIndex("id")));
    	i.putExtra("had_texte", c.getInt(c.getColumnIndex("TEXTE")));
    	String TEXTE = c.getString(c.getColumnIndex("TEXTE"));
    	i.putExtra("TEXTE", TEXTE);
    	startActivity(i);
    			}
    		}
    	});;
    et dans l'activity2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TextView text=(TextView)findViewById(R.id.hadTexte);
    Intent res = getIntent();
    text.setText("Local: "+res.getExtras().getString("TEXTE"));
    Modérateurs, je suis toujours ok pour tenter un tuto. Si vous êtes preneur, j'aurai toutefois besoin d'un peu d'accompagnement (savoir où mettre en ligne, jeter un oeil sur la mise en page, l'orthographe, et sûrement un peu d'optimisation du code).

    Mercis encore à vous bruno.getJava() et thierrybenji pour le temps que vous m'avez accordé et les infos/compétences que vous avez partagées.

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

Discussions similaires

  1. Passer des données d'une activité à une autre
    Par Man_AB dans le forum Android
    Réponses: 8
    Dernier message: 16/05/2011, 20h42
  2. Réponses: 18
    Dernier message: 26/06/2008, 10h10
  3. Réponses: 8
    Dernier message: 04/04/2006, 17h29
  4. Réponses: 9
    Dernier message: 21/02/2006, 09h06
  5. passer des données a une autre page php
    Par questionneuse dans le forum Langage
    Réponses: 10
    Dernier message: 25/01/2006, 00h56

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