一篇不错的讲Android Sqlite的文章

http://blog.csdn.net/nieweilin/archive/2010/10/02/5919013.aspx

package com.android.testapp; import java.io.ByteArrayOutputStream; import java.io.InputStream; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Bitmap.CompressFormat; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract; import android.provider.ContactsContract.Contacts; import android.view.KeyEvent; import android.widget.ImageView; public class contentprovider extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.contentprovider); Cursor cur = managedQuery( ContactsContract.Contacts.CONTENT_URI, null, null, null, ContactsContract.Contacts.DISPLAY_NAME); if(cur.moveToFirst()){ String name; String contactId; int nameColumn = cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); int idColumn = cur.getColumnIndex(ContactsContract.Contacts._ID); do { // Get the field values int count = cur.getInt(cur.getColumnIndex( ContactsContract.Contacts.HAS_PHONE_NUMBER)); name = cur.getString(nameColumn); contactId = cur.getString(idColumn); System.out.println(name+"--id--"+contactId); if(count>0){ Cursor phCur = managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ " = " + contactId, null, null); if(phCur.moveToFirst()){ do{ String number = phCur.getString(phCur.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER)); System.out.println("No:"+number); }while(phCur.moveToNext()); } } Bitmap bmp = getPhoto(getContentResolver(), Integer.parseInt(contactId)); if(bmp != null){ ImageView im = (ImageView)findViewById(R.id.imageView1); im.setImageBitmap(bmp); }else{ ByteArrayOutputStream baos = new ByteArrayOutputStream(); Bitmap bmpset = BitmapFactory.decodeResource(getResources(), R.drawable.me); bmpset.compress(CompressFormat.JPEG, 80, baos); setContactPhoto(getContentResolver(), baos.toByteArray(), Integer.parseInt(contactId)); } } while (cur.moveToNext()); } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyCode == KeyEvent.KEYCODE_DPAD_CENTER){ testInsert(); }else if(keyCode == KeyEvent.KEYCODE_DPAD_UP){ testDelete(-1); }else if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN){ Cursor cur = managedQuery( ContactsContract.Contacts.CONTENT_URI, null, null, null, null); if(cur.moveToFirst()){ testUpdate(Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)))); } } return super.onKeyDown(keyCode, event); } private Bitmap getPhoto(ContentResolver contentResolver, long contactId) { Uri contactPhotoUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); InputStream photoDataStream = Contacts.openContactPhotoInputStream(contentResolver,contactPhotoUri); Bitmap photo = BitmapFactory.decodeStream(photoDataStream); return photo; } private void setContactPhoto(ContentResolver c, byte[] bytes, long personId) { ContentValues values = new ContentValues(); int photoRow = -1; String where = ContactsContract.Data.RAW_CONTACT_ID + " = " + personId + " AND " + ContactsContract.Data.MIMETYPE + "=='" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'"; Cursor cursor = c.query(ContactsContract.Data.CONTENT_URI, null, where, null, null); int idIdx = cursor.getColumnIndexOrThrow(ContactsContract.Data._ID); if (cursor.moveToFirst()) { photoRow = cursor.getInt(idIdx); } cursor.close(); values.put(ContactsContract.Data.RAW_CONTACT_ID, personId); values.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1); values.put(ContactsContract.CommonDataKinds.Photo.PHOTO, bytes); values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE); if (photoRow >= 0) { c.update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.Data._ID + " = " + photoRow, null); } else { c.insert(ContactsContract.Data.CONTENT_URI, values); } } private void testDelete(int contactId){ if(contactId == -1){ //delete all contacts getContentResolver().delete(ContactsContract.RawContacts.CONTENT_URI, null, null); }else{ //delete one contact Uri uri = ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, contactId); getContentResolver().delete(uri, null, null); } } private void testUpdate(long contactId){ ContentValues values = new ContentValues(); values.clear(); values.put(ContactsContract.Data.RAW_CONTACT_ID, contactId); values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, "giv"); values.put(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, "fam"); values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); int NameRow = -1; String where = ContactsContract.Data.RAW_CONTACT_ID + " = " + contactId + " AND " + ContactsContract.Data.MIMETYPE + "=='" + ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE + "'"; Cursor cursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, where, null, null); int idIdx = cursor.getColumnIndexOrThrow(ContactsContract.Data._ID); if (cursor.moveToFirst()) { NameRow = cursor.getInt(idIdx); } cursor.close(); getContentResolver().update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.Data._ID + " = " + NameRow, null); } /** * 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId * 这时后面插入data表的依据,只有执行空值插入,才能使插入的联系人在通讯录里面可见 */ public void testInsert() { ContentValues values = new ContentValues(); //首先向RawContacts.CONTENT_URI执行一个空值插入(raw_contacts 表), 为了获取生成的联系人 ID Uri rawContactUri = getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values); //然后获取系统返回的rawContactId , 就是新加入的这个联系人的 ID long rawContactId = ContentUris.parseId(rawContactUri); /* Andorid 中,将联系人的姓名、电话、Email * 分别存放在 data 表的同一个字段的三条记录当中 * 因此要 Insert 三次 */ //往data表入姓名数据 values.clear(); // raw_contacts_id 字段,是 raw_contacts表id 的外键,用于说明此记录属于哪一个联系人 values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); // mimitype_id 字段,用于描述此数据的类型,电话号码?Email?.... values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, "eclipse"); getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values); //往data表入电话数据 values.clear(); values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "13921009789"); values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE); getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values); //往data表入Email数据 values.clear(); values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId); values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE); values.put(ContactsContract.CommonDataKinds.Email.DATA, "liming@itcast.cn"); values.put(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK); getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values); } }

更多相关文章

  1. android 两个 activity 用 handler传递数据
  2. Android保存Serializable数据到本地
  3. Android通过HTTP协议实现上传文件数据
  4. Android一个ListView列表之中插入两种不同的数据
  5. Android 将数据库文件保存至sdcard中
  6. Android 发送JSON数据到服务端
  7. android使用properties文件存储数据
  8. SQlite数据库(2)----android 操作

随机推荐

  1. Android实现长时间等待界面
  2. Android开发之应用程序基础及组件
  3. Android学习札记6:ProgressBar圆形进度条
  4. Android 仿淘宝选中商品不同尺寸的按钮组
  5. android:clearTaskOnLaunch的用法
  6. android 向服务端发送请求编码问题
  7. android 自动化压力测试-monkey 1 实践
  8. Android(安卓)View浜嬩欢鍒嗗彂鏈哄埗(婧
  9. 编译android vlc
  10. android ui线程和数据的分离