Android:将所选联系人保存到SQLite数据库

时间:2014-02-18 10:36:29

标签: java android sqlite android-listview android-contacts

在我的应用中,我允许用户选择五个联系人(逐个),以便我可以向选定的联系人发送自定义消息。我想将选定的联系人保存到DataBase。当用户点击"选择联系人按钮"时,它会打开手机的联系簿,所选联系人将显示在列表视图中。同样,他可以添加5个联系人,我想将它们保存在DataBase中。我已经能够编写一些代码,但不知道如何保存联系人。请帮助。

MainActivity.java

@Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            message = (EditText) findViewById(R.id.et_message);

            DatabaseHandler db = new DatabaseHandler(this);
            /**
             * CRUD Operations
             * */
    //      Inserting Contacts
            Log.d("Insert: ", "Inserting .."); 



            // Reading all contacts
            Log.d("Reading: ", "Reading all contacts.."); 
            List<ContactItems> contacts = db.getAllContacts();       

            for (ContactItems cn : contacts) {
                String log = "Id: "+cn.getType()+" ,Name: " + cn.getName() + " ,Phone: " + cn.getNumber();
                    // Writing Contacts to log
            Log.d("Name: ", log);
        }
        /************************** saving custom message *****************************/

            // for saving text that user can change as per need
            final SharedPreferences preferences = PreferenceManager
                    .getDefaultSharedPreferences(this);

            // loads the text that has been stored to SP and set it to Edit Text
            message.setText(preferences.getString("autoSave", ""));

            // adding addTextChangedListner() to the Edit Text View
            message.addTextChangedListener(new TextWatcher() {

                @Override
                public void onTextChanged(CharSequence s, int start, int before,
                        int count) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void beforeTextChanged(CharSequence s, int start, int count,
                        int after) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void afterTextChanged(Editable s) {
                    // TODO Auto-generated method stub
                    // saving text after it is changed by the user
                    preferences.edit().putString("autoSave", s.toString()).commit();

                }
            });
            ListView contactlist = (ListView) findViewById(R.id.contactListitems);
            Resources res = getResources();
            adapter = new CustomAdapter(MainActivity.this, selectedContactList, res);
            contactlist.setAdapter(adapter);
/**************************EDIT******************************************/
contactlist.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            String contactData = selectedContactList.get(arg2).toString();
        }
    }); 

        // defining button elements for picking contacts from phone-book
            btn_cntct = (Button) findViewById(R.id.bpickperson);
            btn_cntct.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    if (selectedContactList.size() < 5) {
                        // TODO Auto-generated method stub
                        // using Intent for fetching contacts from phone-book
                        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                        intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
                        startActivityForResult(intent, REQUESTCODE);
                    } else {
                        // print toast for not allowing user to add more contacts
                        Toast.makeText(getApplicationContext(),
                                "You Can Only Add 5 Contacts ", Toast.LENGTH_SHORT)
                                .show();
                    }

                }

            });

        }
    @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            // TODO Auto-generated method stub
            super.onActivityResult(requestCode, resultCode, data);
    if (data != null) {
                Uri uri = data.getData();
                Log.i("data", uri.toString());
                if (uri != null) {
                    Cursor c = null;
                    try {
                        c = getContentResolver()
                                .query(uri,
                                        new String[] {
                                                ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                                                ContactsContract.CommonDataKinds.Phone.NUMBER,
                                                ContactsContract.CommonDataKinds.Phone.TYPE },
                                        null, null, null);

                        if (c != null && c.moveToFirst()) {
                            final ContactItems item = new ContactItems(
                                    c.getString(0), c.getString(1), c.getInt(2));
                            item.setName(c.getString(0));
                            item.setNumber(c.getString(1));
                            item.setType(c.getInt(2));
                            selectedContactList.add(item);
                            Set<ContactItems> s = new TreeSet<ContactItems>(
                                    new Comparator<ContactItems>() {

                                        @Override
                                        public int compare(ContactItems o1,
                                                ContactItems o2) {
                                            // for preventing duplicacy of contacts
                                            // and calling toast
                                            if (o1.number.equals(o2.number)) {
                                                Toast.makeText(
                                                        getApplicationContext(),
                                                        "Selected Number Already Exists",
                                                        Toast.LENGTH_SHORT).show();
                                            } else {

                                            }
                                            return o1.getNumber().compareTo(
                                                    o2.getNumber());

                                        }
                                    });

                            s.addAll(selectedContactList);
                            selectedContactList.clear();
                            selectedContactList.addAll(s);
                            adapter.notifyDataSetChanged();
                            // save the task list to preference

                        }
                    } finally {
                        if (c != null) {
                            c.close();
                        }
                    }
                }
            }

        }
    }

ContactItems.java

public class ContactItems   {
    String name = "";
    String number = "";
    int type = 0;

    public ContactItems(String name, String number, int type) {
        super();
        this.name = name;
        this.number = number;
        this.type = type;
    }

    public ContactItems(Parcel source) {
        // TODO Auto-generated constructor stub

        this.name = source.readString();
        this.number = source.readString();
        this.type = source.readInt();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }



    public static final Parcelable.Creator<ContactItems> CREATOR = new Parcelable.Creator<ContactItems>() {

        @Override
        public ContactItems createFromParcel(Parcel source) {
            return new ContactItems(source);
        }

        @Override
        public ContactItems[] newArray(int size) {
            return new ContactItems[size];
        }

    };
}

DatabaseHandler.java

public class DatabaseHandler extends SQLiteOpenHelper {
    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;
    // Database Name
    private static final String DATABASE_NAME = "contactManager";
    // contact table name
    private static final String TABLE_CONTACTS = "contacts";
    // contacts table column names
    private static final String KEY_NAME = "name";
    private static final String KEY_PH_NO = "phone_number";
    private static final String KEY_ID = "id";

    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        String CREATE_CONACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "("
                + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
                + KEY_PH_NO + " TEXT" + ")";
        db.execSQL(CREATE_CONACTS_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS" + TABLE_CONTACTS);
        onCreate(db);
    }

    /**
     * All CRUD(Create, Read, Update, Delete) Operations
     */

    // Adding new contact
    void addContact(ContactItems contact) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact.getName()); // Contact Name
        values.put(KEY_PH_NO, contact.getNumber()); // Contact Phone

        // Inserting Row
        db.insert(TABLE_CONTACTS, null, values);
        db.close(); // Closing database connection
    }

    // Getting single contact
    ContactItems getContact(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
                KEY_NAME, KEY_PH_NO }, KEY_ID + "=?",
                new String[] { String.valueOf(id) }, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        ContactItems contact = new ContactItems(cursor.getString(2),
                cursor.getString(1), Integer.parseInt(cursor.getString(0)));
        // return contact
        return contact;
    }

    // Getting All Contacts
    public List<ContactItems> getAllContacts() {
        List<ContactItems> contactList = new ArrayList<ContactItems>();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + TABLE_CONTACTS;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                ContactItems contact = new ContactItems(null);
                contact.setType(Integer.parseInt(cursor.getString(0)));
                contact.setName(cursor.getString(1));
                contact.setNumber(cursor.getString(2));
                // Adding contact to list
                contactList.add(contact);
            } while (cursor.moveToNext());
        }

        // return contact list
        return contactList;
    }

    // Updating single contact
    public int updateContact(ContactItems contact) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact.getName());
        values.put(KEY_PH_NO, contact.getNumber());

        // updating row
        return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
                new String[] { String.valueOf(contact.getType()) });
    }

    // Deleting single contact
    public void deleteContact(ContactItems contact) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
                new String[] { String.valueOf(contact.getType()) });
        db.close();
    }

    // Getting contacts Count
    public int getContactsCount() {
        String countQuery = "SELECT  * FROM " + TABLE_CONTACTS;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();

        // return count
        return cursor.getCount();
    }

}

CustomAdapter.java

public class CustomAdapter extends BaseAdapter {

    /*********** Declare Used Variables *********/
    private Activity activity;
    private ArrayList<ContactItems> data;
    private static LayoutInflater inflater = null;
    public Resources res;
    // ListModel tempValues=null;
    int i = 0;
    String selectedNum = " ";

    /************* CustomAdapter Constructor *****************/
    public CustomAdapter(Activity a, ArrayList<ContactItems> d,
            Resources resLocal) {

        /********** Take passed values **********/
        activity = a;
        data = d;
        res = resLocal;

        /*********** Layout inflator to call external xml layout () ***********/
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    /******** What is the size of Passed Arraylist Size ************/
    public int getCount() {

        if (data.size() <= 0)
            return 1;
        return data.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    /********* Create a holder Class to contain inflated xml file elements *********/
    public static class ViewHolder {

        public TextView text;
        public TextView textNumber;

        public ImageView image;

    }

    /****** Depends upon data size called for each row , Create each ListView row *****/
    @SuppressLint("DefaultLocale")
    public View getView(int position, View convertView, ViewGroup parent) {
        final int pos = position;
        View vi = convertView;
        ViewHolder holder;
        // check if converView is null, if it is null it probably means
        if (convertView == null) {

            /****** Inflate tabitem.xml file for each row ( Defined below ) *******/
            vi = inflater.inflate(R.layout.contactlistitem, null);

            /****** View Holder Object to contain tabitem.xml file elements ******/
            // if it is not null, just reuse it from the recycler
            holder = new ViewHolder();
            holder.text = (TextView) vi.findViewById(R.id.contactname);
            holder.textNumber = (TextView) vi.findViewById(R.id.contactnumber);
            holder.image = (ImageView) vi.findViewById(R.id.deleteimage);

            /************ Set holder with LayoutInflater ************/
            vi.setTag(holder);
        } else
            holder = (ViewHolder) vi.getTag();

        if (data.size() <= 0) {

            holder.text.setText("Add Contacts");
            holder.textNumber.setText(" ");
            holder.image.setVisibility(View.GONE);

        } else {
            /***** Get each Model object from Arraylist ********/

            /************ Set Model values in Holder elements ***********/

            holder.text.setText("" + data.get(position).getName());

            holder.textNumber.setText("" + data.get(position).getNumber());
            holder.image.setVisibility(View.VISIBLE);
            holder.image.setImageResource(res.getIdentifier("delete_button",
                    null, null));

            holder.image.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    AlertDialog.Builder build = new AlertDialog.Builder(
                            activity);
                    build.setTitle("Delete");
                    build.setMessage("Are You Sure");
                    build.setPositiveButton("Delete",
                            new DialogInterface.OnClickListener() {

                                @Override
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    // TODO Auto-generated method stub
                                    data.remove(pos);
                                    MainActivity.adapter.notifyDataSetChanged();
                                    dialog.dismiss();
                                }
                            });

                    /*
                     * data.remove(pos);
                     * MainActivity.adapter.notifyDataSetChanged();
                     */
                    build.setNegativeButton("Cancel",
                            new DialogInterface.OnClickListener() {

                                @Override
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    // TODO Auto-generated method stub
                                    dialog.dismiss();
                                }
                            });
                    build.show();
                }

            });
            /******** Set Item Click Listner for LayoutInflater for each row *******/

        }
        // return the view for a single item in the listview
        return vi;
    }

}

0 个答案:

没有答案