質問があります。ContactsContractを使用してすべてのフィールドを更新する方法
私のアプリケーションでは、エンドユーザーはuername、email、およびcityを入力します。 ユーザーが入力した電子メールが存在する場合、更新クエリが実行されます。フィールドのユーザー名と都市は自分の携帯電話で更新されるはずです。電子メールが存在しない場合は、新しい連絡先を作成する必要があります。
新しいエントリを作成できましたが、何らかの理由で更新クエリが正しく機能していません。 私は大失敗をしているかもしれません。
ヘルプが必要です。
私はcreateContactとupdateContactコードを投稿しています。連絡先を作成しても問題ありません。新しい連絡先を挿入することができます。
//接触ここ
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build());
//------------------------------------------------------ Names
if(!DisplayName.equals("")) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, DisplayName)
.build());
}
if(emailID != null) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Email.DATA, emailID)
.withValue(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK)
.build());
}
if(!street.equals("") || !city.equals("") || !state.equals("") || !zipcode.equals("")) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredPostal.STREET, street)
.withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK)
.withValue(ContactsContract.CommonDataKinds.StructuredPostal.CITY, city)
.withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK)
.withValue(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, zipcode)
.withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK)
.withValue(ContactsContract.CommonDataKinds.StructuredPostal.REGION, state)
.withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK)
.build());
}
//更新の接触
public void updateEmailContact(String fname, String email) {
Cursor cur = managedQuery(ContactsContract.Data.CONTENT_URI, null, null, null, null);
if ((null == cur) || (!cur.moveToFirst()));
Log.i("Test", "----------------------Cursor Count----------------------" + cur.getCount());
if(cur != null) {
if(cur.moveToFirst()) {
do {
String raw_contact_id = cur.getString(cur.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID));
String where = ContactsContract.Data.RAW_CONTACT_ID + " = ? AND " +
ContactsContract.Data.MIMETYPE + " = ? AND " +
String.valueOf(ContactsContract.CommonDataKinds.Email.TYPE) + " = ?";
String[] params = new String[]{raw_contact_id,
ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE,
String.valueOf(ContactsContract.CommonDataKinds.Email.TYPE_WORK)};
Cursor emailCur = managedQuery(ContactsContract.Data.CONTENT_URI, null, where, params, null);
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
Log.i("Test", "--------Email Count---------------" + emailCur.getCount());
if ((null == emailCur) || (!emailCur.moveToFirst()))
{
}
else
{
String emailAddress = emailCur.getString(
emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
String email_name = emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME));
Log.i("Test", "------------------emailAddress----------------" + emailAddress + " " + email_name);
Log.i("Test", "-------------------fname----------------------" + fname_edit.getText().toString().trim());
if(emailAddress.equalsIgnoreCase(email)) {
ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI)
.withSelection(CommonDataKinds.StructuredName.DISPLAY_NAME + "=?", new String[] {"Krishna"})
.withValue(CommonDataKinds.StructuredName.DISPLAY_NAME, fname_edit.getText().toString().trim())
.build());
try {
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (OperationApplicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//return true;
} else {
}
}
try {
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
Toast.makeText(getBaseContext(), "Contact Updated.....!!!!", Toast.LENGTH_LONG).show();
} catch (RemoteException e) {
e.printStackTrace();
} catch (OperationApplicationException e) {
e.printStackTrace();
}
emailCur.close();
}while(cur.moveToNext());
}
}
cur.close();
}
私はあなたのコードをチェックしています。しかし、電話番号の有無をチェックする必要があります。電話番号が存在する場合は、そのエントリを更新する必要があります –
私の更新方法はどこが間違っていますか? –
私はIntentによってそれをやりたいとは思わない... –