2 votes

Obtenir une exception d'exécution en temps d'exécution donnant des données de colonne invalides2 ?

Je essaie d'obtenir le nom des contacts et leurs types mais je reçois cette exception à la ligne marquée dans le code. J'obtenais les noms avant d'ajouter les types, mais maintenant je reçois cette exception. S'il vous plaît aidez. Merci d'avance.

package application.test;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;

import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Contacts;
import android.util.Log;

public class TestActivity extends Activity {
    /** Appelée lorsque l'activité est créée pour la première fois. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        String[] projection = new String[] { ContactsContract.Contacts._ID,
                ContactsContract.Contacts.DISPLAY_NAME,Phone.TYPE};     

        ContentResolver cr = getContentResolver();
        ContentResolver ncr=getContentResolver();

        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, projection,null, null, Contacts.DISPLAY_NAME + " ASC");
        Cursor ncur=ncr.query(ContactsContract.Data.CONTENT_URI, projection, null, null,Contacts.DISPLAY_NAME + " ASC");
        Cursor icur = cr.query(ContactsContract.RawContacts.CONTENT_URI, projection,null, null, Contacts.DISPLAY_NAME + " ASC");

        if (cur.getCount() >0 && ncur.getCount()>0) 
        {
            while (cur.moveToNext()&& ncur.moveToNext()) 
            {

                String id = icur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                String type=ncur.getString(cur.getColumnIndex(Phone.TYPE))  ;

                if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
                {

                    Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{id}, null);

                    Cursor typecur = ncr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null);             

                    while (pCur.moveToNext()&& typecur.moveToNext())
                    {
                        Log.d("names",name);
                        Log.d("types",type);
                        pCur.close();
                    } 
                }
            }
        }
    }
}

0voto

Vinay Points 1635

En projection, Phone.Type n'est pas une partie de la table Contacts que vous interrogez. Expliquez en détail ce que vous essayez de faire.

Si vous recherchez le Type de téléphone, alors vous devriez interroger la table de données

REMARQUE: Je suppose que vous utilisez Android version 2.0 + et non 1.5 ou 1.6

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X