نمایش نتایج 1 تا 4 از 4

نام تاپیک: اضافه کردن مخاطب با استفاده از content provider

  1. #1

    Question اضافه کردن مخاطب با استفاده از content provider

    سلام
    خسته نباشید
    Content Provider
    این کد برای اضافه کردن یک مخاطبه
    من اصلا متوجه این کد نشدم دوستان
    به نظر می آد Content provider خیلی سخت باشه
    هر ops.add در واقع یک ستون رو اد میکنه؟
    میشه این کدرو توضیح بدید. ممنون:
        private void addContacts(String name,String phone)    {
    Cursor cursor= getContentResolver().query(ContactsContract.Contac ts.CONTENT_URI,null,null,null,null);
    int count=cursor.getCount();
    if (count>0)
    {
    while ((cursor.moveToNext())) {
    String existName = cursor.getString(cursor.getColumnIndex(ContactsCon tract.Contacts.DISPLAY_NAME));
    if (existName.equals(name)) {
    Toast.makeText(getApplicationContext(), "Sorry exists", Toast.LENGTH_LONG).show();
    return;
    }
    }
    ArrayList<ContentProviderOperation> ops=new ArrayList<ContentProviderOperation>();
    int rawContactInsertIndex=ops.size();
    ops.add(ContentProviderOperation.newInsert(Contact sContract.RawContacts.CONTENT_URI)
    .withValue(ContactsContract.RawContacts.ACCOUNT_TY PE, null)
    .withValue(ContactsContract.RawContacts.ACCOUNT_NA ME, null).build());
    ops.add(ContentProviderOperation.newInsert(Contact sContract.Data.CONTENT_URI)
    .withValueBackReference(ContactsContract.Data.RAW_ CONTACT_ID, rawContactInsertIndex)
    .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CO NTENT_ITEM_TYPE)
    .withValue(ContactsContract.CommonDataKinds.Struct uredName.DISPLAY_NAME, name).build());
    ops.add(ContentProviderOperation.newInsert(Contact sContract.Data.CONTENT_URI)
    .withValueBackReference(ContactsContract.Data.RAW_ CONTACT_ID, rawContactInsertIndex)
    .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITE M_TYPE)
    .withValue(ContactsContract.CommonDataKinds.Phone. NUMBER, phone)
    .withValue(ContactsContract.CommonDataKinds.Phone. TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE ).build());


    try {
    getContentResolver().applyBatch(ContactsContract.A UTHORITY,ops);
    } catch (RemoteException e) {
    e.printStackTrace();
    } catch (OperationApplicationException e) {
    e.printStackTrace();
    }
    Toast.makeText(this,"Created",Toast.LENGTH_LONG).s how();
    }
    }

  2. #2

    نقل قول: اضافه کردن مخاطب با استفاده از content provider

    آیا ContactsContract.Data.DISPLAY_NAME یعنی ستون DISPLAY_NAME موجود در جدول Data ؟ و ContactsContract.Contacts.DISPLAY_NAME یعنی ستون DISPLAY_NAME موجود در جدل Contacts؟
    الان Contacts و Data دو جدول متفاوتند؟ در جدول Contact مخاطبها ذخیره میشود پس در جدول Data چه چیزی؟

  3. #3

    نقل قول: اضافه کردن مخاطب با استفاده از content provider

    زمانی که می خواهید با دیتابیس یک برنامه خارج از اپلیکیشن خودتون ارتباط برقرار کنید از content provider استفاده میکنید مثلا یکیش همین لیست مخاطبین گوشی هست(البته حتما باید مجوز دسترسی در AndroidManifest داده بشه)
    یعنی دقیقا سرویس هایی هستند که به راحتی می توانید با استفاده از دستورات t-sql مربوط به sqlite به داده های اون برنامه دسترسی داشته باشید البته با استفاده از URI ها ویا حتی زمانی خواستید خودتون هم سرویس هایی بنویسید که نیاز به ارتباط داده ای داشتند می توانید به راحتی یک provider بنویسید.

    Cursor cursor= getContentResolver().query(ContactsContract.Contac ts.CONTENT_URI,null,null,null,null);

    در دستور بالا با استفاده از تابع getContentResolver که در سطح اپلیکیشن کلاس هست یک کوئری را اجرا کردید.

    while ((cursor.moveToNext())) {
    String existName = cursor.getString(cursor.getColumnIndex(ContactsCon tract.Contacts.DISPLAY_NAME));
    if (existName.equals(name)) {
    Toast.makeText(getApplicationContext(), "Sorry exists", Toast.LENGTH_LONG).show();
    return;
    }
    }

    در حلقه فوق هم فیلد نام مخاطب در تک تک رکوردهای جدول مخاطبین با نام ورودی جدید مقایسه می شود که تکراری نباشد.

    ops.add(ContentProviderOperation.newInsert(Contact sContract.RawContacts.CONTENT_URI)
    .withValue(ContactsContract.RawContacts.ACCOUNT_TY PE, null)
    .withValue(ContactsContract.RawContacts.ACCOUNT_NA ME, null).build());

    ACCOUNT_TYPE , ACCOUNT_NAME را در ContactsContract.RawContacts

    ops.add(ContentProviderOperation.newInsert(Contact sContract.Data.CONTENT_URI)
    .withValueBackReference(ContactsContract.Data.RAW_ CONTACT_ID, rawContactInsertIndex)
    .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CO NTENT_ITEM_TYPE)
    .withValue(ContactsContract.CommonDataKinds.Struct uredName.DISPLAY_NAME, name).build());

    RAW_CONTACT_ID که برابر با تعداد لیست مخاطبین هست و MIMETYPE در ContactsContract.Data و DISPLAY_NAME در بانک CommonDataKinds.StructuredName

    ops.add(ContentProviderOperation.newInsert(Contact sContract.Data.CONTENT_URI)
    .withValueBackReference(ContactsContract.Data.RAW_ CONTACT_ID, rawContactInsertIndex)
    .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITE M_TYPE)
    .withValue(ContactsContract.CommonDataKinds.Phone. NUMBER, phone)
    .withValue(ContactsContract.CommonDataKinds.Phone. TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE ).build());

    NUMBER , TYPE در CommonDataKinds.Phone
    ذخیره خواهند شد و برای اینکه بتوانید اطلاعات جدید را در جداول مخاطبین گوشی اضافه کنید نیاز به یک ArrayList دارید که باید نام مخاطب و شماره مخاطب و نوع و Kind مخاطب را در جدوال مورد نظر اضافه کنید.
    ودر آخر هم

    getContentResolver().applyBatch(ContactsContract.A UTHORITY,ops);

    با استفاده از متد applyBatch می توانید ArrayList خود راکه fill کرده اید در provider مورد نظر ذخیره نمایید.
    پس بنابراین در تکمیل پاسخ باید عرض کنم شما با استفاده از contentProvider ها مستقیما با نام جداول provider موردنظرتون کاری ندارید بجاش از URI هایی استفاده میکنید که به جدوال مورد نظر اشاره میکنند مانند ContactsContract.CommonDataKinds.StructuredName

  4. #4

    نقل قول: اضافه کردن مخاطب با استفاده از content provider

    خیلی ممنون از اینکه جواب دادید
    در این برنامه دیتابیس و جدول هم وجود داره؟ منظورم اینه که آیا ContactsContract همون دیتابیسه؟ و Contacts جدول؟
    و
    ContactsContract.Contacts.DISPLAY_NAME با ContactsContract.Data.DISPLAY_NAME چه فرقی دارد؟
    ContactsContract.RawContacts هم یک جدوله؟

    ops.add(ContentProviderOperation.newInsert(Contact  sContract.RawContacts.CONTENT_URI)
    .withValue(ContactsContract.RawContacts.ACCOUNT_TY PE, null)
    .withValue(ContactsContract.RawContacts.ACCOUNT_NA ME, null).build());


    در دستور فوق نام ستون در RawContacts ذخیره میشوند؟ منظورم اینه که آیا Account_TYPE و ACCOUNT_NAME نام ستونند؟
    معذرت میخوام من خیلی مبتدی هستم فهمیدنش سخته برام ولی میخوام یاد بگیرم. ممنون

تاپیک های مشابه

  1. پاسخ: 0
    آخرین پست: پنج شنبه 13 اردیبهشت 1397, 02:04 صبح
  2. نام فایل دیتابیس content provider برای contacts چرا فرق داره؟
    نوشته شده توسط ho1377 در بخش Android Studio
    پاسخ: 1
    آخرین پست: دوشنبه 20 فروردین 1397, 08:56 صبح
  3. سوال: استفاده از content در css
    نوشته شده توسط arezooafshari در بخش طراحی وب (Web Design)
    پاسخ: 3
    آخرین پست: شنبه 03 آبان 1393, 15:18 عصر
  4. سوال: provider cannot be found. ensure that the provider has been installed properly.
    نوشته شده توسط عباس سرخ خان کاشانی در بخش SQL Server
    پاسخ: 1
    آخرین پست: یک شنبه 09 تیر 1387, 21:12 عصر
  5. provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server
    نوشته شده توسط rasame در بخش ASP.NET Web Forms
    پاسخ: 1
    آخرین پست: شنبه 01 دی 1386, 11:29 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •