偏好项目的重复联系人

偏好项目的重复联系人

问题描述:

我在创建一个偏好活动,其中有3个偏好项目。当我点击它们中的每一个时,我加载联系人以选择一个联系人。选择联系人后,我保存它的名称和电话号码,然后将其显示在首选项中。这是我做的方式:偏好项目的重复联系人

的preferences.xml

<PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android" > 

    <PreferenceCategory 
     android:title="@string/contact"> 

     <Preference 
      android:key="Contact1" 
      android:title="Contact 1"/> 

     <Preference 
      android:key="Contact2" 
      android:title="Contact 2"/> 

     <Preference 
      android:key="Contact3" 
      android:title="Contact 3"/>  
    </PreferenceCategory> 
</PreferenceScreen> 

UserSettingsActivity.java延伸PreferenceActivity

SharedPreferences mPreferences; 
Preference contact1; 
Preference contact2; 
Preference contact3; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.preferences); 

    contact1 = findPreference("Contact1"); 
    contact2 = findPreference("Contact2"); 
    contact3 = findPreference("Contact3"); 

    contact1.setOnPreferenceClickListener(new OnPreferenceClickListener() { 
     @Override 
     public boolean onPreferenceClick(Preference preference) { 
      Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
      startActivityForResult(intent, PICK_CONTACT_1); 
      return false; 
     } 
    }); 
    contact2.setOnPreferenceClickListener(new OnPreferenceClickListener() { 
     @Override 
     public boolean onPreferenceClick(Preference preference) { 
      Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
      startActivityForResult(intent, PICK_CONTACT_2); 
      return false; 
     } 
    }); 
    contact3.setOnPreferenceClickListener(new OnPreferenceClickListener() { 
     @Override 
     public boolean onPreferenceClick(Preference preference) { 
      Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
      startActivityForResult(intent, PICK_CONTACT_3); 
      return false; 
     } 
    }); 
} 


@Override 
public void onActivityResult(int reqCode, int resultCode, Intent data) { 
    super.onActivityResult(reqCode, resultCode, data); 
    Uri contactData = data.getData(); 
    switch(reqCode) { 
     case (PICK_CONTACT_1): 
      if (resultCode == RESULT_OK){ 
       String contactID = null; 
       String contactNumber = null; 
       String contactName = null; 
       /*Get contact ID*/ 
       Cursor cursorID = getContentResolver().query(contactData, new String[]{ContactsContract.Contacts._ID}, 
         null, null, null); 
       if (cursorID.moveToFirst()) { 
        contactID = cursorID.getString(cursorID.getColumnIndex(ContactsContract.Contacts._ID)); 
       } 
       cursorID.close(); 
       /*Get contact number using ID*/ 
       Cursor cursorPhone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
         new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER}, 
         ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND " + 
           ContactsContract.CommonDataKinds.Phone.TYPE + " = " + 
           ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE, 
           new String[]{contactID}, null); 
       if (cursorPhone.moveToFirst()) { 
        contactNumber = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
       } 
       cursorPhone.close(); 
       /*Get name*/ 
       Cursor cursor = getContentResolver().query(contactData, null, null, null, null); 
       if (cursor.moveToFirst()) { 
        contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
       } 
       cursor.close(); 
       /*Show on preferences*/ 
       contact1.setTitle(contactName); 
       contact1.setSummary(contactNumber); 
      } 
     case (PICK_CONTACT_2): 
      if (resultCode == RESULT_OK){ 
       String contactID = null; 
       String contactNumber = null; 
       String contactName = null; 
       /*Get contact ID*/ 
       Cursor cursorID = getContentResolver().query(contactData, new String[]{ContactsContract.Contacts._ID}, 
         null, null, null); 
       if (cursorID.moveToFirst()) { 
        contactID = cursorID.getString(cursorID.getColumnIndex(ContactsContract.Contacts._ID)); 
       } 
       cursorID.close(); 
       /*Get contact number using ID*/ 
       Cursor cursorPhone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
         new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER}, 
         ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND " + 
           ContactsContract.CommonDataKinds.Phone.TYPE + " = " + 
           ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE, 
           new String[]{contactID}, null); 
       if (cursorPhone.moveToFirst()) { 
        contactNumber = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
       } 
       cursorPhone.close(); 
       /*Get name*/ 
       Cursor cursor = getContentResolver().query(contactData, null, null, null, null); 
       if (cursor.moveToFirst()) { 
        contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
       } 
       cursor.close(); 
       /*Show on preferences*/ 
       contact2.setTitle(contactName); 
       contact2.setSummary(contactNumber); 
      } 
     case (PICK_CONTACT_3): 
      if (resultCode == RESULT_OK){ 
       String contactID = null; 
       String contactNumber = null; 
       String contactName = null; 
       /*Get contact ID*/ 
       Cursor cursorID = getContentResolver().query(contactData, new String[]{ContactsContract.Contacts._ID}, 
         null, null, null); 
       if (cursorID.moveToFirst()) { 
        contactID = cursorID.getString(cursorID.getColumnIndex(ContactsContract.Contacts._ID)); 
       } 
       cursorID.close(); 
       /*Get contact number using ID*/ 
       Cursor cursorPhone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
         new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER}, 
         ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND " + 
           ContactsContract.CommonDataKinds.Phone.TYPE + " = " + 
           ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE, 
           new String[]{contactID}, null); 
       if (cursorPhone.moveToFirst()) { 
        contactNumber = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
       } 
       cursorPhone.close(); 
       /*Get name*/ 
       Cursor cursor = getContentResolver().query(contactData, null, null, null, null); 
       if (cursor.moveToFirst()) { 
        contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
       } 
       cursor.close(); 
       /*Show on preferences*/ 
       contact3.setTitle(contactName); 
       contact3.setSummary(contactNumber); 
      } 
    } 
} 

的问题是,当我设置一个接触Contact1Contact2Contact3也获得相同的联系人。这是我第一次使用偏好,所以我不知道这可能是什么原因。

问题不在于首选项,而是在switch声明中。

您需要在每个陈述结束时break。如果没有break,匹配案例标签之后的语句将按顺序执行,而不考虑后续案例标签的表达式。

只包含一个break语句,以防止你的开关块的语句从通过下降:

switch(reqCode) { 
     case (PICK_CONTACT_1): 
      --------- 
      --------- 
      break; 
     case (PICK_CONTACT_2): 
      --------- 
      --------- 
      break; 
     case (PICK_CONTACT_3): 
      --------- 
      --------- 
      break; 

} 
+0

OMG!多么愚蠢的错误!现在就工作,谢谢! – masmic 2014-12-05 09:04:11