首页 > 其他分享 >Pro Android学习笔记(八):了解Content Provider(下中)

Pro Android学习笔记(八):了解Content Provider(下中)

时间:2023-04-09 13:05:35浏览次数:50  
标签:String BookTableMetaData Pro 下中 Content BOOK cr cv name


在之前提供了小例子BookProvider,我们回过头看看如何将通过该Content Provider进行数据的读取。

(1)增加

private void addBook(String name ,String isbn,String author){ 
    /* 从ContentProvider的insert()方法的参数可以看到,通过ContentValues来进行数据的传递。ContentValues是key/values对,可以存储多个组,非常适合传递信息 */ 
    ContentValues cv = new ContentValues();     cv.put(BookTableMetaData.BOOK_NAME, name); 
     cv.put(BookTableMetaData.BOOK_ISBN, isbn); 
     cv.put(BookTableMetaData.BOOK_AUTHOR, author); 
     /* ContentResolver负责将URI reference解析到正确的provider上,并对该provider的公开的读写接口进行操作。它的方法和provider提供的方法一一对应,并增加了uri参数。*/ 
    ContentResolver cr = getContentResolver();     Uri insertUri = cr.insert(BookProviderMetaData.BookTableMetaData.CONTENT_URI, cv); //对应BookProvider的insert() 
}

(2)删除

private void delBook(String name){ 
    ContentResolver cr = getContentResolver();
     int count = cr.delete(BookProviderMetaData.BookTableMetaData.CONTENT_URI,    /* Uri          uri */ 
                     BookTableMetaData.BOOK_NAME + "=?",                    /* String         WhereClause */ 
                     new String[]{name});                                                        /* String[]        selectionArgs */ 
}

(3)修改: update和insert非常相似,也是通过ContentValues传递修改内容。

private void updateBookIsbn(String name ,String newIsbn,String newAuthor){ 
     ContentValues cv = new ContentValues(); 
     cv.put(BookTableMetaData.BOOK_NAME, name); 
     cv.put(BookTableMetaData.BOOK_ISBN, newIsbn); 
     cv.put(BookTableMetaData.BOOK_AUTHOR, newAuthor); 
     
     ContentResolver cr = getContentResolver(); 
     int count = cr.update(BookProviderMetaData.BookTableMetaData.CONTENT_URI,     /* Uri        uri */ 
                      cv,                                                                               /* ContentValues  values */ 
                      BookTableMetaData.BOOK_NAME + "=?",            /* String           WhereClause */ 
                      new String[]{name});                                                /* String[]         selectionArgs */ 
}

(4)查询

private void showBooks(){ 
     Uri uri = BookProviderMetaData.BookTableMetaData.CONTENT_URI; 
      /*方式一,通过managedQuery( )*/     @SuppressWarnings("deprecation") 
    Cursor c = managedQuery(uri, null, null, null, null);     /* 方式二:利用ContentResolver的query来获取*/
     // ContentResolver cr = getContentResolver(); 
     // Cursor c = cr.query(uri, null, null, null, null);     int iIndex = c.getColumnIndex(BookTableMetaData._ID); 
     int iName = c.getColumnIndex(BookTableMetaData.BOOK_NAME); 
     int iIsbn = c.getColumnIndex(BookTableMetaData.BOOK_ISBN); 
     int iAuthor = c.getColumnIndex(BookTableMetaData.BOOK_AUTHOR); 
/* 需要注意,通过下面showInfo显示,各列的Id并非按我们的创建table的列的顺序,所以一定要先获取列的ID。至于row的_id,是按顺序提供,为当前最大的_id+1。但除非我们能很明确清楚,一般不使用这些系统内部安排的Id */     showInfo("ColumnIndex _id=" + iIndex + ",name=" + iName + ",isdn=" + iIsbn + ", author=" + iAuthor); 
     showInfo("Totle books : " + c.getCount()); 
     for(c.moveToFirst(); !c.isAfterLast();c.moveToNext()){ 
         String id = c.getString(iIndex); 
         String name = c.getString(iName); 
         String isbn = c.getString(iIsbn); 
         String author = c.getString(iAuthor); 
         showInfo("[" +id + "]" + "\t" + name + "\t" + isbn  + "\t" + author); 
    } 
     c.close(); 
 }


标签:String,BookTableMetaData,Pro,下中,Content,BOOK,cr,cv,name
From: https://blog.51cto.com/u_9877302/6178769

相关文章

  • Android学习笔记(四九):通过Content Provider访问数据
    在上次笔记中,我们编写了自己的Provider,这次笔记,我们将通过ContentProvider的Uri接口对数据进行访问,重写Android学习笔记(四二)中例子。在这里我们不在充分描述相关UI如何编写,可以到笔记(四二)中详细查看,重点讲述如何实现数据的访问。读取信息读取信息方式,在笔记(四七)中已经介绍,代码如下......
  • Android学习笔记(四八):提供自己的Content Provider
    在上一次的学习中,采用了原生的内容提供者Contact,Contact有多层映射关系,比较复杂,并非作为小例子的好选择,在本次学习中,我们将学习如何建立ContentProvider,并通过Uri进行增删改查。如果应用的数据只需自己使用,并不需要contentprovider,相反避免这样做,可直接访问数据;但是若希望数据可......
  • Pro Android学习笔记(四六):Dialog(3):对话框弹对话框
    提示框的按钮Help,将触发弹出新的帮助提示框。帮助提示框的实现帮助提示框的实现很简单,利用重写onCreateView()的方式,点击按钮是执行dismiss(),关闭对话框即可。代码不在此重复。dialogfragment的关闭有两种方式,一种是在dialogfragment中直接执行dismiss(),我们来看看DialogFragmen......
  • Pro Android学习笔记(四五):Dialog(2):DialogFragment
    DialogFragment的实例newInstance()已经在上一次学习笔记中实现。我们创建dialog的UI,可以通过重写DialogFragment的两个函数当中的一个来实现,这两个函数是onCreateView()和onCreateDialog(),前者返回view,后者返回dialog,如同通过AlertDialog.Builder构造一样。重写onCreateView()重写......
  • Pro Android学习笔记(四四):Dialog(1):触发Dialog
    Android提供alert、prompt、pick-list,单选、多选,progress、time-picker和date-picker对话框,并提供自定义的dialog。在Android3.0后,dialog基于fragment,并对之前版本提供兼容支持库,也就是说对于开发者而言,dialog是基于DialogFragment的,但此时需要在应用中加入相关的兼容库。和Window......
  • Pro Android学习笔记(二六):用户界面和控制(14):RelativeLayout
    相对布局:RelativeLayoutRelativeLayout也是非常常用的布局,能够精确对控件的位置进行网格对齐,可以设置在控件与其他控件的相对位置,以及控件在容器中的位置。缺省控件的位置为最上面还最左边。下面结合一个例子来进行解说。<?xmlversinotallow="1.0"encoding="utf-8"?><Relativ......
  • 解决前端启动报错:This is probably not a problem with npm. There is likely additio
    在执行npmrundev运行项目的时候报错:{"os":"darwin","arch":"any"}(current:{"os":"win32","arch":"x64"})npmERR!codeELIFECYCLEnpmERR!errno1npmERR!phantomjs-prebuilt@2.1.16in......
  • 14.ProxySQL中间件01
       Proxysql是基于mysql的一款开源的中间件的产品,是一个灵活的Mysql代理层,可以实现读写分离,支持Query路由功能,支持动态指定某个sql进行缓存,支持动态加载配置信息(无须重启proxysql服务),支持故障切换和sql的过滤功能。相关的网站:  https://www.proxysql.com/   ......
  • 52、K8S-监控机制-Prometheus【理论知识】
    Kubernetes学习目录1、监控基础1.1、监控机制1.1.1、数据层面我们如果要监控数据,首先得有数据,也就是说,这些数据应该可以被记录下来,或者被暴露出来,数据常见的产生、直接或间接暴露方式的方式如下:1、硬件本身的记录信息-以文件或者以内存属性的方式存在2、应用业务的接口-......
  • k8s部署prometheus
    部署到一个k8s集群gitclone-brelease-0.12https://github.com/prometheus-operator/kube-prometheus.gitcdkube-prometheusgrep"image:"./manifests/-R国内无法下载的镜像:以8s.gcr.io开头k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.5.0k8s.gcr.io/prometheu......