偏好项目的重复联系人
问题描述:
我在创建一个偏好活动,其中有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);
}
}
}
的问题是,当我设置一个接触Contact1
, Contact2
和Contact3
也获得相同的联系人。这是我第一次使用偏好,所以我不知道这可能是什么原因。
答
问题不在于首选项,而是在switch
声明中。
您需要在每个陈述结束时break
。如果没有break
,匹配案例标签之后的语句将按顺序执行,而不考虑后续案例标签的表达式。
只包含一个break语句,以防止你的开关块的语句从通过下降:
switch(reqCode) {
case (PICK_CONTACT_1):
---------
---------
break;
case (PICK_CONTACT_2):
---------
---------
break;
case (PICK_CONTACT_3):
---------
---------
break;
}
OMG!多么愚蠢的错误!现在就工作,谢谢! – masmic 2014-12-05 09:04:11