您的位置:首页 > 移动开发 > Android开发

第五周Android实习笔记

2016-04-03 10:35 645 查看
四大组件

1.ContentProvider

如何实现ContentProvide

1继承抽象类ContentProvide实现增删改查等方法

2.在AndroidManifest.xml中完成对COntentProvide的注册

public class MyContentProvider extends ContentProvider{
//比如你实现了增和删
@Override//根据Uri删除selection指定的条件所匹配的全部记录
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
return 0;
}

@Override//返回当前uri的MIME类型,如果该URI对应的数据可能包括多条记录
//那么MIME类型字符串 就是以vnd.android.dir/开头
//  如果该URI对应的数据只有一条记录 该MIME类型字符串 就是以vnd.android.cursor.item/开头
public String getType(Uri uri) {
// TODO Auto-generated method stub
return null;
}

@Override//根据Uri插入Values对应的数据
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
return null;
}

@Override//在ContetnProvider创建后被调用
public boolean onCreate() {
// TODO Auto-generated method stub
return false;
}

@Override//根据uri查询出selection指定的条件所匹配的全部记录,并且可以指定查询哪些列 以什么方式(order)排序
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
return null;
}

@Override//根据uri修改selection指定的条件所匹配的全部记录
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO Auto-generated method stub
return 0;
}

}




URI:



如何解析URI:



要操作ContentProvider数据需要使用到ContentResolver:





利用ContentProvider查询联系人实例:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ContentResolver cr = getContentResolver();
Cursor c = cr.query(Contacts.CONTENT_URI, new String[] { Contacts._ID,
Contacts.DISPLAY_NAME }, null, null, null);
if (c != null) {
while (c.moveToNext()) {
int id = c.getInt(c.getColumnIndex("_id"));
Log.i("info", "_id:" + id);
Log.i("info",
"name:" + c.getString(c.getColumnIndex("display_name")));
Cursor c1 = cr.query(Phone.CONTENT_URI, new String[] {
Phone.NUMBER, Phone.TYPE },
Phone.CONTACT_ID + "=" + id, null, null);
// 根据联系人ID查询出联系人的电话号码
if (c1 != null) {
while (c1.moveToNext()) {
int type = c1.getInt(c1.getColumnIndex(Phone.TYPE));
if (type == Phone.TYPE_HOME) {
Log.i("info",
"家庭电话:"
+ c1.getString(c1
.getColumnIndex(Phone.NUMBER)));
} else if (type == Phone.TYPE_MOBILE) {
Log.i("info",
"手机:"
+ c1.getString(c1
.getColumnIndex(Phone.NUMBER)));
}
}
c1.close();
}
// 根据联系人的ID去查询出联系人的邮箱地址
Cursor c2 = cr.query(Email.CONTENT_URI, new String[] {
Email.DATA, Email.TYPE }, Email.CONTACT_ID + "=" + id,
null, null);
if (c2 != null) {
while (c2.moveToNext()) {
int type = c2.getInt(c2.getColumnIndex(Email.DATA));
if (type == Email.TYPE_WORK) {
Log.i("info",
"工作邮箱:"
+ c2.getString(c2
.getColumnIndex(Email.DATA)));
}
}
c2.close();
}
}
c.close();
}
}

}


注:使用系统提供的ContentProvider可以增删改查联系人,短信的读取,通话记录,多媒体等等信息,而自定义实现的ContentProvider就比较复杂。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: