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 :

Accéder aux données du ContactProvider à partir de l'URI d'un contact


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Par défaut Accéder aux données du ContactProvider à partir de l'URI d'un contact
    Bonjour je vais dabord vous présenter mon projet ,pour que mes questions soient plus pertinentes et que je puisse recevoir les meilleurs conseils

    je développe une application doit qui afficher le nom des contacts dans une liste dans la première activité ,et lorsque l'on clique sur un nom affiche les informations personnelles relatives a ce nom .je souhaiterais ensuite en appuyant sur un bouton pouvoir modifier ces informations et les enregistrer.

    j'ai fait une première activité qui affiche les noms des contacts dans une liste ,ensuite au click je passe l'URI du contact sélectionné a la 2e activité(celle qui doit afficher les informations du contact) ,et je n'arrive pas a récupérer les informations du contat pour les afficher ( je ne sais pas comment faire)
    donc je souhaiterais que l'on m'aide sur ce point
    et si il y a une meilleure façon de faire je suis tout ouï
    merci d'avance

  2. #2
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,

    Pourrais tu nous montrer ce que tu as fait, pour le passage d'informations entre activity ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Par défaut
    J'ai dabord fais un programme qui m'affiche la liste des contacts .
    j''ai utilisé un adapteur personalisé pour afficher un nom et un icone contact (c'est la tout ce que fais l'adapteur).

    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
    package sam.projet;
     
    import android.app.Activity;
    import android.content.Intent;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.ContactsContract;
    import android.util.Log;
    import android.view.Menu;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ListView;
     
    public class Contact extends Activity {
     
    	private final String ADRESSE = "uri";
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.contact);
     
            String projection[] = {ContactsContract.Contacts._ID , ContactsContract.Contacts.DISPLAY_NAME};
            final Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, projection, null, null, null);
     
            int nameIdx = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
            int idIdx = cursor.getColumnIndex(ContactsContract.Contacts._ID);
     
     
            String result[] = new String[cursor.getCount()];
            String nom ;
     
            while (cursor.moveToNext()){
            	nom = cursor.getString(nameIdx);
            	result[cursor.getPosition()] = nom + "";
            }
            	ContactsAdapter adapter = new ContactsAdapter(this,result);
            	ListView list = (ListView)findViewById(R.id.listView10);
            	list.setAdapter(adapter);
            	cursor.close();
            	list.setOnItemClickListener(new OnItemClickListener(){
     
    				@Override
    				public void onItemClick(AdapterView<?> arg0, View arg1,
    						int arg2, long arg3) {
    					// TODO Auto-generated method stub
    					String selected = (String)arg0.getItemAtPosition(arg2);
    					//String id = 
     
     
    					Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, selected);
    					String adresse = uri.toString();
    					Intent intent= new Intent(Contact.this,ContactInfo.class);
    					intent.putExtra(ADRESSE, adresse);
    					//PackageManager pm = getPackageManager();
    					//ComponentName component = intent.resolveActivity(pm);
    					startActivity(intent);
    				}
     
            	});
            	cursor.close();
        }
    ensuite
    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
    package sam.projet;
     
    import java.io.FileNotFoundException;
    import java.io.InputStream;
     
    import android.app.Activity;
    import android.content.Intent;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.ContactsContract;
    import android.util.Log;
    import android.view.Menu;
    import android.widget.TextView;
     
    public class ContactInfo extends Activity {
     
    	private final String ADRESSE = "uri";
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_contact_info);
     
    		TextView NomView = (TextView)findViewById(R.id.NomContact);
    		TextView NumberView = (TextView)findViewById(R.id.PortableContact);
     
     
    		Intent intent = getIntent();
    		String adresse = intent.getStringExtra(ADRESSE);
    		Uri uri = Uri.parse(adresse);
    		String proj1[] ={ContactsContract.Contacts._ID,ContactsContract.Contacts.DISPLAY_NAME};
    		String proj2[] = {ContactsContract.CommonDataKinds.Phone.NUMBER};
     
    		Cursor basicCursor = getContentResolver().query(uri,null, null, null, null);
    		//Cursor phoneCursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI, proj2, null, null, null);
     
    		String id = null;
    		String number = null;
    		String name = null;
     
    		if (basicCursor.moveToFirst()){
    			int idIdx = basicCursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID);
    			id = basicCursor.getString(idIdx);
     
    			//int numberIdx = phoneCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER);
    			//number = phoneCursor.getString(numberIdx);
     
    			int nameIdx = basicCursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME);
    			name = basicCursor.getString(nameIdx);
    			Log.v("IDENTIFIANT","" + id);
    			Log.v("NUMBER","" + number);
     
    		}
    	}
    sa ne marche pas ,on dirais que je ne peut pas récupérer une donnée unique
    dans le content provider contact,j'ai des erreurs
    je voudrais récupérer des informations comme :
    l'e-mail,l'adresse ,le pays ,le code postal,,le nom de famille,les réseaux sociaux,etc..
    je sais ou sont toutes ces information ..Dans
    ContactsContract.CommonDataKinds ,mais je n'arrive pas a émettre de requête dessus.
    voila mon problème ,je pense que je n'ai pas une vision assez claire sur les content provider ,pourtant ,en théorie il est possible de requêter les lignes..
    merci de votre aide et/ou de vos suggestions

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Par défaut
    j'ai modifié les 2 codes
    a la fin de la première activité je passe 2 arguments a la 2e activité :
    l'uri du contact cliqué et son _ID
    voila le code de la 2e activité
    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
    package sam.projet;
     
    import android.app.Activity;
    import android.content.Intent;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.ContactsContract;
    import android.util.Log;
    import android.view.Menu;
    import android.widget.TextView;
     
    public class ContactInfo extends Activity {
     
    	private final String ADRESSE = "uri";
    	private final String ID = "id";
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_contact_info);
     
    		// On lie des certaines cases texte du layout
    		TextView NomView = (TextView)findViewById(R.id.NomContact);
    		TextView NumberView = (TextView)findViewById(R.id.PortableContact);
     
     
    		Intent intent = getIntent();
    		String adresse = intent.getStringExtra(ADRESSE);
    		String id = intent.getStringExtra(ID);
    		Uri uri = Uri.parse(adresse);
    		Log.v("ADRESSE"," "+ContactsContract.Contacts.CONTENT_URI);
    		String proj1[] ={ContactsContract.Contacts._ID,ContactsContract.Contacts.DISPLAY_NAME};
    		String proj2[] = {ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Email.ADDRESS};
     
    		Cursor basicCursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, "_ID = "+id, null, null);
    		Cursor phoneCursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI, proj2, "_ID = "+id, null, null);
     
    		String number = null;
    		String name = null;
    		//c'est a ce niveau que sa plante
    		int numberIdx = phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
    		number = phoneCursor.getString(numberIdx);
    		Log.v("NUMBER","" + number);
     
     
    		if (basicCursor.moveToFirst()){
     
    			int nameIdx = basicCursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME);
    			name = basicCursor.getString(nameIdx);
     
    		}
    	}
    voila mon problème est un peu plus spécifié

  5. #5
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Bonjour,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String proj1[] ={ContactsContract.Contacts._ID,ContactsContract.Contacts.DISPLAY_NAME};
    		String proj2[] = {ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Email.ADDRESS};
     
    		Cursor basicCursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, "_ID = "+id, null, null);
    		Cursor phoneCursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI, proj2, "_ID = "+id, null, null);
    Tu as un souci ou les colonnes demandés et la table données ne sont pas liés

    Si tu veux récupérer des informations sur la table ContactsContract.Data.CONTENT_URI alors tu ne peux avoir que les colonnes que tu trouveras à ce lien :
    http://developer.android.com/referen...ract.Data.html

    Soit les colonnes de la ContactsContract.Contacts , ContactsContract.RawContacts,ContactsContract.StatusUpdates et de la Data , mais pas des Du coup projection si tu veux récupérer l'adresse email

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    		String proj1[] = {ContactsContract.CommonDataKinds.Phone.NUMBER};
    String proj1[] = {ContactsContract.CommonDataKinds.Phone.NUMBER};
     
     
    		Cursor phoneCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, proj1, "_ID = "+id, null, null);
    Cursor phoneCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, proj2, "_ID = "+id, null, null);

    id à passer sera l'ID_CONTACT trouvé dans la table CONTACT. (le RAW il me semble)


    Edit : d'après la doc on peut passer par le Data.CONTENT_URI qui est elle lié au PHONE, EMAIL ,...
    http://developer.android.com/referen...ract.Data.html

    du coup celle ci devrait marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    String proj2[] = {Phone.NUMBER,.Email.ADDRESS};
     
    Cursor c = getContentResolver().query(Data.CONTENT_URI,
              proj2,
              Data.CONTACT_ID + "=?" + " AND "
                      + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'",
              new String[] {String.valueOf(contactId)}, null);
    toujours avec le raw id du contact

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Par défaut
    Bonjour
    j'ai fais ce que vous m'avez indiqué mais je tombe devant les mêmes erreurs au niveau du Logcat ,je les ai copiés ci dessous
    peut être allez vous reconnaître des erreurs familière.
    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
    01-16 10:24:47.395: W/dalvikvm(25617): threadid=1: thread exiting with uncaught exception (group=0x40c601f8)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): FATAL EXCEPTION: main
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): java.lang.RuntimeException: Unable to start activity ComponentInfo{sam.projet/sam.projet.ContactInfo}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 0
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at android.app.ActivityThread.access$600(ActivityThread.java:127)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at android.os.Looper.loop(Looper.java:137)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at android.app.ActivityThread.main(ActivityThread.java:4511)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at java.lang.reflect.Method.invokeNative(Native Method)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at java.lang.reflect.Method.invoke(Method.java:511)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at dalvik.system.NativeStart.main(Native Method)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 0
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at android.database.AbstractCursor.checkPosition(AbstractCursor.java:400)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at android.database.CursorWrapper.getString(CursorWrapper.java:114)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at sam.projet.ContactInfo.onCreate(ContactInfo.java:48)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at android.app.Activity.performCreate(Activity.java:4470)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)
     
    01-16 10:24:47.400: E/AndroidRuntime(25617): 	... 11 more

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

Discussions similaires

  1. [C#] Comment accéder aux données d'une Form ?
    Par cjacquel dans le forum Windows Forms
    Réponses: 5
    Dernier message: 28/07/2006, 11h55
  2. Problème pour accéder aux données ASP.net côté client
    Par mappy dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/07/2006, 15h10
  3. Relation ! schéma ! comment accèder aux données ?
    Par julien.63 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 20/06/2006, 21h14
  4. Accéder aux données d'un sous formulaire
    Par jkembo dans le forum Access
    Réponses: 6
    Dernier message: 28/04/2006, 16h38

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