(android 基础知识之数据存储) ContentResolver

     当应用程序需要与别的应用进行交互时,需要使用Android提供的两个类,ContentProvider和ContentResolver来实现相关功能。ContentProvider用来提供内容给别的应用来操作,ContentResolver用来操作(包括查询、插入等)别的应用数据,当然在自己的应用中也可以。 本着重讲解ContentResolver的用法。

        可用通过Context来获取ContentResolver的实例,在Activity中,可以直接使用下面这句:

[java]   view plain copy
  1. ContentResolver resolver = this.getContentResolver();    

         获取到该对象后,可实现如下一些常用的功能:

[java]   view plain copy
  1. //查询:     
  2. public final Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);     
  3. //新增     
  4. public final Uri insert(Uri url, ContentValues values)         
  5. //更新     
  6. public final int update(Uri uri, ContentValues values, String where, String[] selectionArgs)     
  7. //删除     
  8. public final int delete(Uri url, String where, String[] selectionArgs)  

        查询

[java]   view plain copy
  1. <strong>query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)</strong>  

        描述:根据指定的URI,返回一个游标结果集Cursor。为了提高性能,使用该方法最好能遵照以下的建议:1)对于返回结果,使用projection参数指定记录中包含的字段,以避免大量不用的字段被检索,浪费资源;2)在selection参数中使用类似phone=?的问号表达式来指定检索条件中的字段值,尽量不要使用指定值(比如phone='123'),这样有利于查询的系统缓存。

        参数:

        uri 表示用于获取什么内容的URI,比如通讯录为Phone.CONTENT_URI

        projection 字段名称数组,比如要获取联系人的显示名称、电话号码、头像ID、联系人ID,则值为:

[java]   view plain copy
  1. new String[] { Phone.DISPLAY_NAME, Phone.NUMBER, Photo.PHOTO_ID,Phone.CONTACT_ID }  

        selection 查询条件字符串,类似sql语句中的where子句,比如:display_name=? and number=?

        selectionArgs 参数selection中问号(?)对应的参数值数组

        sortOrder 对应sql语句的order by子句,如采用默认排序,值可传null值。

        实例代码:实现查询指定用户(号码)发送到本机的短信信息

import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class ContentResolverActivity extends Activity {
    private Button start;
    //查询手机全部短信
    final String SMS_URL_ALL="content://sms/";
	@Override
	public void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.layout_contentresolver);
		start=(Button) findViewById(R.id.start);
		start.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//查看手机短信
				ContentResolver resolver = getContentResolver(); 
				//查询返回数据数据
				String[] projection=new String[]{"body","date"};
				//查询条件
				String selection=new String("address=?");
				//匹配查询条件的值----待定
				String[] selectionargs=new String[]{"+8618673109540"};
				//是否排序操作
				String sortOrder="date desc";
				//地址解析
				Uri uri = Uri.parse(SMS_URL_ALL); 
				//游标实例化
				Cursor cursor=resolver.query(uri, projection, selection, selectionargs, sortOrder);
				//数据查询
				if(cursor.moveToFirst()){
					String smsbody;
					String date;
					
					int smsbodyColumn=cursor.getColumnIndex("body");
					int dateColumn=cursor.getColumnIndex("date");
					
					do{
						//信息内容
						smsbody=cursor.getString(smsbodyColumn);
						//信息接收时间
						SimpleDateFormat dateFormat = new SimpleDateFormat(   
		                        "yyyy-MM-dd hh:mm:ss");   
		                Date d = new Date(Long.parseLong(cursor.getString(dateColumn)));   
		                date = dateFormat.format(d); 
		                
		                Toast.makeText(ContentResolverActivity.this, "信息内容:"+smsbody+",接收时间:"+date, Toast.LENGTH_LONG).show();
		                System.out.println("信息内容:"+smsbody+",接收时间:"+date);
					}while(cursor.moveToNext());
				}
				//游标关闭
				cursor.close();
			}
			
		});
	}
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值