2011-09-07 16 views
8

मैं एक टेक्स्ट संदेश एप्लिकेशन बना रहा हूं और अपने एंड्रॉइड एप्लिकेशन में संपर्कों को एक्सेस करना चाहता हूं।मेरे एंड्रॉइड प्रोग्राम में संपर्कों का उपयोग कैसे करें

मैं संपर्कों को एक्सेस करना चाहता हूं जैसे कि वे वास्तविक संपर्क सूची में हैं। चयनित होने पर मुझे अपनी गतिविधि पर वापस लौटना होगा जिसमें मैं उस व्यक्ति को एक एसएमएस भेज सकता हूं। या डेटाबेस को एक्सेस करना संभव है जिसमें संपर्क संग्रहीत किए जाते हैं?

मेरे कोड नीचे दिखाया गया है:

09-07 12:46:15.458: DEBUG/AndroidRuntime(473): Shutting down VM 
09-07 12:46:15.458: WARN/dalvikvm(473): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473): FATAL EXCEPTION: main 
09-07 12:46:15.478: ERROR/AndroidRuntime(473): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/0r1-512D3F3D533B/1 flg=0x1 (has extras) }} to activity {task.list/task.list.Msgactivity}: java.lang.IllegalArgumentException: column 'data1' does not exist 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.app.ActivityThread.deliverResults(ActivityThread.java:2532) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.app.ActivityThread.handleSendResult(ActivityThread.java:2574) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.app.ActivityThread.access$2000(ActivityThread.java:117) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:961) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.os.Looper.loop(Looper.java:123) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at java.lang.reflect.Method.invoke(Method.java:507) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at dalvik.system.NativeStart.main(Native Method) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473): Caused by: java.lang.IllegalArgumentException: column 'data1' does not exist 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:99) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at task.list.Msgactivity.onActivityResult(Msgactivity.java:99) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.app.Activity.dispatchActivityResult(Activity.java:3908) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  at android.app.ActivityThread.deliverResults(ActivityThread.java:2528) 
09-07 12:46:15.478: ERROR/AndroidRuntime(473):  ... 11 more 
09-07 12:46:15.489: WARN/ActivityManager(61): Force finishing activity task.list/.Msgactivity 

किसी को भी मेरी मदद कर सकते:

String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 
String no = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

मेरे LogCat इस तरह दिखता है?

+0

क्या मुझे अनुमति जोड़ने की आवश्यकता है – sajith

+0

या आपको अनुमति जोड़ने की आवश्यकता है। –

उत्तर

13

उपयोग इस कोड को संपर्क चुनने के लिए:

Button button = (Button)findViewById(R.id.pickcontact); 

    button.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
       startActivityForResult(intent, PICK_CONTACT); 
      } 
     }); 



    @Override public void onActivityResult(int reqCode, int resultCode, Intent data){ super.onActivityResult(reqCode, resultCode, data); 

    switch(reqCode) 
    { 
     case (PICK_CONTACT): 
     if (resultCode == Activity.RESULT_OK) 
     { 
      Uri contactData = data.getData(); 
      Cursor c = managedQuery(contactData, null, null, null, null); 
      if (c.moveToFirst()) 
      { 
      String id = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); 

      String hasPhone = 
      c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 

      if (hasPhone.equalsIgnoreCase("1")) 
      { 
     Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, 
      ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id,null, null); 
      phones.moveToFirst(); 
      String cNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      // Toast.makeText(getApplicationContext(), cNumber, Toast.LENGTH_SHORT).show(); 
      setCn(cNumber); 
      } 
     } 
     } 
    } 
    } 
+0

धन्यवाद लेकिन मैं चयनित संपर्क संख्या को एक चर – sajith

+0

पर संपादित पोस्ट कैसे संग्रहीत कर सकता हूं .... – swan

+0

यदि चयनित आईडी में एक से अधिक संख्याएं हैं तो क्या होगा। उपरोक्त कोड के अनुसार, यह पहला नंबर पुनर्प्राप्त करता है। क्या उपयोगकर्ता के लिए यह चुनने का कोई विकल्प नहीं है कि वह कौन सा नंबर चाहता है? – AnujAroshA

8
2

इस कोड का प्रयास करें। यह ArrayList

ArrayList<HashMap<String,String>> contactData=new ArrayList<HashMap<String,String>>(); 
ContentResolver cr = getContentResolver(); 
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); 
while (cursor.moveToNext()) { 
    try{ 
    String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
    String name=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
    String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
    if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
     Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null); 
     while (phones.moveToNext()) { 
      String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      HashMap<String,String> map=new HashMap<String,String>(); 
      map.put("name", name); 
      map.put("number", phoneNumber); 
      contactData.add(map); 
     } 
     phones.close(); 
    } 
}catch(Exception e){} 
} 

में सभी संपर्कों को संग्रहीत करता है यदि आप विशिष्ट संपर्क का उपयोग किसी शर्त पर संग्रहीत करना चाहते हैं।

+0

हैफ़ोन मूल्य 1 लौटाता है, लेकिन एक त्रुटि होती है जब स्ट्रिंग phoneNumber = phone.getString (phone.getColumnIndex (ContactContract.CommonDataKinds.Phone.NUMBER)); निष्पादित करता है, – sajith

+0

समस्या क्या होगी जिसका अर्थ है "हैफ़ोन मूल्य 1 लौटाता है"। आपकी समस्या नहीं मिल रही है –

+0

स्ट्रिंग हैफोन = c.getString (c.getColumnIndex (contactContract.Contacts.HAS_PHONE_NUMBER)); – sajith

संबंधित मुद्दे