2012-04-07 14 views
1

Ich verwende den folgenden Code, um den Namen und die Nummer der Kontakte mit SimpleCursorAdapter abrufen.android Abrufen von Kontakten Name und Nummer mit SimpleCursorAdapter

final Uri uri = ContactsContract.Contacts.CONTENT_URI; 
    final String[] projection = new String[] { 
      ContactsContract.Contacts._ID, 
      ContactsContract.Contacts.DISPLAY_NAME }; 
    // boolean mShowInvisible = false; 
    String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP 
      + " = '1'"; 
    String[] selectionArgs = null; 
    final String sortOrder = ContactsContract.Contacts.DISPLAY_NAME 
      + " COLLATE LOCALIZED ASC"; 

    m_curContacts = managedQuery(uri, projection, selection, selectionArgs, 
      sortOrder); 
    String[] fields = new String[] { ContactsContract.Data.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER}; 
    m_slvAdapter = new SimpleCursorAdapter(this, 
      android.R.layout.simple_list_item_2, m_curContacts, fields, 
      new int[] { android.R.id.text1,android.R.id.text2 }); 

, aber wenn ich es laufen i

04-07 17:05:34.980: WARN/dalvikvm(614): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
04-07 17:05:34.990: ERROR/AndroidRuntime(614): Uncaught handler: thread main exiting due to uncaught exception 
04-07 17:05:35.080: ERROR/AndroidRuntime(614): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kpj4s.contactadapter/com.kpj4s.contactadapter.ContactAdapter}: **java.lang.IllegalArgumentException: column 'data1' does not exist** 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at android.app.ActivityThread.access$2200(ActivityThread.java:119) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at android.os.Looper.loop(Looper.java:123) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at android.app.ActivityThread.main(ActivityThread.java:4363) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at java.lang.reflect.Method.invoke(Method.java:521) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at dalvik.system.NativeStart.main(Native Method) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614): Caused by: java.lang.IllegalArgumentException: column 'data1' does not exist 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:99) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at android.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:339) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at android.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:91) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at com.kpj4s.contactadapter.ContactAdapter.ReadContacts(ContactAdapter.java:158) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at com.kpj4s.contactadapter.ContactAdapter.onCreate(ContactAdapter.java:132) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 
04-07 17:05:35.080: ERROR/AndroidRuntime(614):  ... 11 more 

die folgende Störung erhalte, wenn ich entfernen die ContactsContract.CommonDataKinds.Phone.NUMBER alles funktioniert gut. Wenn ich diesen Teil des Codes verwende, erscheint der Fehler.

Gibt es eine Möglichkeit, diesen oder einen anderen zu verabschieden, um die Telefonnummer und den Namen der Kontakte mit dem SimpleCursorAdapter zu erhalten?

pls help me guys ...

Dank im Voraus ...

Antwort

0

Verwenden Sie diesen Code, um die Telefonnummer und den Namen zu erhalten.

public ArrayList<String> c_Name = new ArrayList<String>(); 
     public ArrayList<String> c_Number = new ArrayList<String>(); 
     static String[] name_Val = null; 
     String[] phone_Val = null; 
     String local_value = null; 

    ContentResolver cr1 = getContentResolver(); 
      String[] projection = new String[] { People._ID, People.NAME, 
        People.NUMBER }; 
      Uri phone_contacts = People.CONTENT_URI; 
      Cursor managedCursor = cr1.query(phone_contacts, projection, null, 
        null, People.NAME + " ASC"); 
      if (managedCursor.moveToFirst()) { 
       String contactname; 
       String cphoneNumber; 
       int nameColumn = managedCursor.getColumnIndex(People.NAME); 
       int phoneColumn = managedCursor.getColumnIndex(People.NUMBER); 
       Log.d("int Name", Integer.toString(nameColumn)); 
       Log.d("int Number", Integer.toString(phoneColumn)); 
       do { 

        contactname = managedCursor.getString(nameColumn); 
        cphoneNumber = managedCursor.getString(phoneColumn); 
        Log.d("Outside cname", "ts" + contactname); 
        Log.d("Outside cno", "ts" + cphoneNumber); 
        if ((contactname == " " || contactname == null) 
          && (cphoneNumber == " " || cphoneNumber == null)) { 
         // displayAlert1(); 

        } else { 
         c_Name.add(contactname); 
         c_Number.add(cphoneNumber); 
         Log.d("contact Name", c_Name.toString()); 
         Log.d("contact No", c_Number.toString()); 
        } 
       } while (managedCursor.moveToNext()); 

      } 

      Uri contacts = Uri.parse("content://icc/adn"); 

      Cursor managedCursor1 = cr1.query(contacts, null, null, null, null); 

      if (managedCursor1.moveToFirst()) { 

       String contactname; 
       String cphoneNumber; 

       int nameColumn = managedCursor1.getColumnIndex("name"); 
       int phoneColumn = managedCursor1.getColumnIndex("number"); 

       Log.d("int Name", Integer.toString(nameColumn)); 
       Log.d("int Number", Integer.toString(phoneColumn)); 

       do { 
        // Get the field values 
        contactname = managedCursor1.getString(nameColumn); 
        cphoneNumber = managedCursor1.getString(phoneColumn); 
        if ((contactname == " " || contactname == null) 
          && (cphoneNumber == " " || cphoneNumber == null)) { 
         // displayAlert1(); 

        } else { 
         c_Name.add(contactname); 
         c_Number.add(cphoneNumber); 
        } 
       } while (managedCursor1.moveToNext()); 

      } 
      name_Val = (String[]) c_Name.toArray(new String[c_Name.size()]); 
      phone_Val = (String[]) c_Number.toArray(new String[c_Name.size()]); 
Verwandte Themen