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


    在之前提供了小例子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 + "]" + " " + name + " " + isbn  + " " + author); 
        } 
        c.close(); 
    }

    相关链接: 我的Android开发相关文章

    转自http://blog.csdn.net/flowingflying/article/details/9243275

  • 相关阅读:
    vs2010 + .net3.5 MSCharts使用介绍与例子
    TFS服务连接TF31002 出错
    SharePoint CAML 通过时间查询
    SharePoint2010项目总结汇总
    jquery 获取和设置 select下拉框的值
    How to Create Multilingual Webpart in SharePoint 2010 (C# 方式)
    sharepoint母版页固定宽度与纵向滚动条靠右边(修改版)
    JavaScript进行GET和POST请求
    端口简介大全
    程序员学习能力提升三要素
  • 原文地址:https://www.cnblogs.com/blongfree/p/5047566.html
Copyright © 2020-2023  润新知