ContactsContract.CommonDataKinds MIMETYPE 定数を、カーソルでクエリしたものと一致させることができないようです。2 つの文字列をテストしたところ、同じように見えますが、条件で比較すると「true」が返されません。
この問題が発生するメソッドのコード スニペットを次に示します。
//gets all the information from the cursor and puts into its respective ArrayList
for(int i=0; i<C.getCount(); i++){
HashMap<String, String> info = new HashMap<String,String>();
info.put(C.getString(3),C.getString(4));
Log.d(TAG, "Itertation: "+i);
Log.d(TAG, "Row Data MIMETYPE: "+C.getString(2));
Log.d(TAG, "Phone MIMETYPE constant: "+ ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); //this line and the above line return the exact same string when the data types match
if(C.getString(2) == ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE){
Log.d(TAG, "I have entered the phone condition");//does not enter even if they are identical
phoneNum.add(info);
}else if(C.getString(2) == ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE){
Log.d(TAG, "I have entered the Email condition");//does not enter
emailAddress.add(info);
}else if(C.getString(2) == ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE){
Log.d(TAG, "I have entered the Address condition");//does not enter
postalAddress.add(info);
}
C.moveToNext();
}
C.getString(2) はその行の MIMETYPE です。クエリとそのパラメーターのスニペットを次に示します。
//query properties
private Uri mUri = ContactsContract.Data.CONTENT_URI;
private String[] mProjections = {ContactsContract.Data.CONTACT_ID, ContactsContract.Data._ID, ContactsContract.Data.MIMETYPE,
ContactsContract.Data.DATA1, ContactsContract.Data.DATA2};
private String mSelection = ContactsContract.Data.CONTACT_ID+ "='"; //the ending of this gets added in the code
private String[] mArgs = null;
private String mSortOrder = null;
C = getContentResolver().query(mUri, mProjections, mSelection , mArgs, mSortOrder);
比較がtrueを返さないという手がかりはありません。一致する必要がある反復について LogChat をチェックすると、次のようになります。
07-13 17:11:48.764: D/ContactDetail(2904): Itertation: 0
07-13 17:11:48.764: D/ContactDetail(2904): Row Data MIMETYPE: vnd.android.cursor.item/phone_v2
07-13 17:11:48.764: D/ContactDetail(2904): Phone MIMETYPE constant: vnd.android.cursor.item/phone_v2
これが機能しない理由を誰かが知っていますか? 私の理解では、Data ではなく CommonDataKinds から定数 MIMETYPE を取得していますが (そこに定数が見つからないようです。Data に定数があるかどうか教えてください)、クエリの MIMETYPE と同じである必要がありますが、多分それらは実際には異なります。それ以外は、なぜそれが機能しないのかわかりません。