当前位置:  编程技术>移动开发
本页文章导读:
    ▪jQuery Mobile正题使用与定制        jQuery Mobile主题使用与定制 http://www.adobe.com/cn/devnet/dreamweaver/articles/theme-control-jquery-mobile.html   在上一篇文章jQuery Mobile入门中,我提供了一种使用jQuery Mobile 框架为智能手机和平板电脑构建.........
    ▪ contentprovider鐨勫涔狅紙杞彂锛        contentprovider鐨勫涔狅紙杞彂锛? 涓€銆丆ontentProvider绠€浠?/span>聽 聽聽 聽 褰?span >搴旂敤缁ф壙ContentProvider绫伙紝骞堕噸鍐欒绫荤敤浜庢彁渚涙暟鎹拰瀛樺偍鏁版嵁鐨勬柟娉曪.........
    ▪ 在xib中按姓名搜索资源文件       在xib中按名称搜索资源文件 grep -i -r --include=*.xib "TextToFindHere"/PathToSearchHere ......

[1]jQuery Mobile正题使用与定制
    来源: 互联网  发布时间: 2014-02-18
jQuery Mobile主题使用与定制

http://www.adobe.com/cn/devnet/dreamweaver/articles/theme-control-jquery-mobile.html

 

在上一篇文章jQuery Mobile入门中,我提供了一种使用jQuery Mobile 框架为智能手机和平板电脑构建优秀 Web体验的介绍。大致来讲,利用jQuery Mobile建立的网站看上去很不错,按钮有光泽,渐变平滑,整体界面优雅。

根据你的设计要求,然而,你可能想混搭颜色以配合贵公司的颜色或品牌,或突出或柔和的按钮和标签。总之,你可能想控制jQuery Mobile网站的外观感觉。本教程演示了在jQuery Mobile网站中如何扩展视觉化结构和主题的方法。

jQuery Mobile的主题和样本

jQuery Mobile使用级联样式表(CSS)来控制内容在屏幕上的可视化布局。jQuery Mobile CSS文档主要有两部分构成:

  • 结构,控制诸如按钮和标签等元素在屏幕上的位置、padding和 margins。
  • 主题,控制字体,颜色,渐变,阴影和转角,编辑主题允许你控制诸如按钮对象的可视化元素。

注:为了减少图像的使用(和服务器请求),jQuery Mobile依赖CSS3属性添加圆角,阴影,而不是传统技术要求JPEG或PNG图像。按钮,背景和制表栏都可利用CSS进行创建。使用图像来控制你的布局这是可能的,但这是例外而不是规则。

每个主题可以包括一个或多个样本。在主题中一个样本可为内容块,按钮,列表项设置颜色,您可以使用样本轻松地切换配色方案。

样本背后的想法是为一个给定网站提供快速替换颜色方案。虽然对于所有网站的页面一般来说都采用统一配色方案,但有些场合页面上的特定元素需要加以突出(例如,Try It按钮)或低调(如,不感兴趣的按钮)处理。样本定义可让您使用替换的配色方案以应付这些情况。

jQuery Mobile内置的CSS文档主题具有一组5种样本,名称分别为 a, b, c, d, and e.按协定a处于视觉最高优先级别,在默认主题中它是黑色的。 (见图1).

图1 使用默认主题和样本创建的屏幕。

jQuery五个默认样本使用(见图2)见于下面jQuery约定:

  • a (黑色):high-level visual priority视觉优先最高级别
  • b (蓝色): secondary level 第二级别
  • c (灰色): baseline
  • d (灰色和白色): alternate secondary level 第二级别备用
  • e (黄色): accent

图2.从a(左)至e(右)为5种默认样本

jQuery Mobile利用默认样本

直接内置到jQuery Mobile的主题控制,利用data-theme属性控制样本。若你没有明确data-theme设置,会采用默认样本 (a)。下面的代码定义一个基本的页面(见图3)使用默认样本:

<div data-role="page" id="page"> <div data-role="header"> <h1>Sample Page</h1> </div> <div data-role="content"> <p>I'm a sample page!</p> </div> </div>

图3.使用默认样本的一个示例页面

在页面上要使用不同的样本需设置data-theme属性,如下面的代码:

<div data-role="page" id="page" data-theme="e"> <div data-role="header"> <h1>Sample Page</h1> </div> <div data-role="content"> <p>I'm a sample page!</p> </div> </div>

从结构上看,页面是一样的。颜色却已经改变,这是因为使用了data-theme="e"样本已切换到E。顶部现在是一个黄色的渐变,背景是白色到黄色的渐变,文本也是不同的颜色(见图4)。

图4.使用了样本E后同一个基础页面

默认情况下,在一个页面上所有组件和视觉元素继承于一个样本,这意味着你只需要引用样本一次,所有的组件将继承新的配色方案。在上面示例代码中,样本给了整个页面设置。

<div data-role="page" id="page" data-theme="e">

你还可以独立控制每个元素的样本(见图5),通过设置元素的data-theme属性,例如:

<div data-role="page" id="page"> <div data-role="header" data-theme="c"> <h1>Header</h1> </div> <div data-role="content" data-theme="d"> <p>Content</p> <p>&nbsp; </p> <ul data-role="listview" data-theme="b"> <li><a href="#page1">Page 1</a></li> </ul> <div data-role="collapsible-set"> <div data-role="collapsible" data-theme="b"> <h3>Header</h3> <p>Content</p> </div> <div data-role="collapsible" data-collapsed="true" data-theme="a"> <h3>Header</h3> <p>Content</p> </div> <div data-role="collapsible" data-collapsed="true" data-theme="e"> <h3>Header</h3> <p>Content</p> </div> </div> </p> <p>&nbsp;<a href="#page4" data-role="button" data-icon="arrow-d" data-iconpos="left" data-theme="e">Go To Page 4</a></p> </div> <div data-role="footer"> <h4>Footer</h4> </div> </div>

图5.样本设置在个别元素上

创建自己的主题

到这一点你已经会修改HTML进行简单操作,为整个页面或个别元素添加data-theme属性设置不同的颜色。这是一个很好的开端,但您可能希望更进一步,控制您的网页上所有内容的可视化布局。jQuery的CSS规则定义在jquery.mobile-1.0b1.css文件中,它须在页面的head 处引用。

注: 当前jQuery Mobile CSS文件(jquery.mobile1.0b1.css)版本为Beta 1 ,该文件名称可能在最终版有所变更。虽然该技术用于本文中,但具有最终发布版后,你将需要用1.0正式版中使用的文件名替换jquery.mobile- 1.0b1.css 。

从 jQuery 下载页面下载这个文件后,在Dreamweaver或您喜爱的文本编辑器打开它。如上所述,CSS文件定义主题(颜色,渐变,字体,阴影,等)和结构(填充和结构元素的位置)。在主题部分包括五个默认样本。

编辑样本

样本部分都有着相似的结构。每个样本前面的注释标识着样本的名称。

下面是样本a的CSS类:

/* A -----------------------------------------------------------------------*/ .ui-bar-a { border: 1px solid #2A2A2A; background:#111111; color:#ffffff; font-weight: bold; text-shadow: 0 -1px 1px #000000; background-image: -moz-linear-gradient(top, #3c3c3c, #111111); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#3c3c3c),color-stop(1,#111111)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#3c3c3c', EndColorStr='#111111')"; }

类名(在这种情况下,ui-bar-a)有一个特定的结构。后缀(在这种情况下,a)标识该类作为a 样本的一部分,它可以利用data-theme="a"进行设置。ui-bar类控制页脚和页眉工具栏。它不使用任何图像,要创建视觉效果,类依赖于CSS3,包括文字阴影和渐变效果。样本b对应的类名为ui-bar-b.。你可以创建自己的样本通过复制样本a和替换每个类名称以–a的后缀名。详见创建自己的主题。

如果你主持自己的jquery.mobile-1.0b1.css文件,你可以直接编辑该文件自定义配色方案。(您可能会希望做一个文件的副本,并使用它。)下面的示例更改了样本A页眉和页脚条上文字的颜色由黑色为红色。

.ui-bar-a { border: 1px solid #2A2A2A; background:#111111; color:red; font-weight: bold; text-shadow: 0 -1px 1px #000000; background-image: -moz-linear-gradient(top, #3c3c3c, #111111); background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#3c3c3c),color-stop(1,#111111)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#3c3c3c', EndColorStr='#111111')"; }

编辑其它样式

CSS文件第600行左右是专门定义默认主题的五个样本。CSS文件的其余部分是用来定义主题的常规外观,如按钮的导角。下面的CSS例子定义导角。

.ui-btn-corner-tl { -moz-border-radius-topleft: 1em; -webkit-border-top-left-radius:1em; border-top-left-radius:1em; } .ui-btn-corner-tr { -moz-border-radius-topright: 1em; -webkit-border-top-right-radius:1em; border-top-right-radius:1em; } .ui-btn-corner-bl { -moz-border-radius-bottomleft: 1em; -webkit-border-bottom-left-radius:1em; border-bottom-left-radius:1em; } .ui-btn-corner-br { -moz-border-radius-bottomright:1em; -webkit-border-bottom-right-radius: 1em; border-bottom-right-radius: 1em; } .ui-btn-corner-top { -moz-border-radius-topleft: 1em; -webkit-border-top-left-radius:1em; border-top-left-radius:1em; -moz-border-radius-topright: 1em; -webkit-border-top-right-radius:1em; border-top-right-radius:1em; } .ui-btn-corner-bottom { -moz-border-radius-bottomleft: 1em; -webkit-border-bottom-left-radius:1em; border-bottom-left-radius:1em; -moz-border-radius-bottomright:1em; -webkit-border-bottom-right-radius: 1em; border-bottom-right-radius: 1em; } .ui-btn-corner-right { -moz-border-radius-topright: 1em; -webkit-border-top-right-radius:1em; border-top-right-radius:1em; -moz-border-radius-bottomright:1em; -webkit-border-bottom-right-radius: 1em; border-bottom-right-radius: 1em; } .ui-btn-corner-left { -moz-border-radius-topleft: 1em; -webkit-border-top-left-radius:1em; border-top-left-radius:1em; -moz-border-radius-bottomleft: 1em; -webkit-border-bottom-left-radius:1em; border-bottom-left-radius:1em; } .ui-btn-corner-all { -moz-border-radius: 1em; -webkit-border-radius: 1em; border-radius: 1em; }

这些类是通用的。他们不引用一个特定的样本。在上面的CSS类中,每个类控制元素的半径,新的CSS3属性支持跨浏览器支持不一致的 需求,每个类有三个属性的,本质上是相同的。

在CSS文件中有数百个类,您可以控制屏幕上的每一个视觉元素外观的修改。

实施变化

当你准备创建自己的主题,或修改默认的主题,我建议你使用默认CSS文件的副本。

  • 在文本编辑器打开jquery.mobile1.0b1.css,并用一个新名称保存文件,例如:jquery.mobile.theme.css。
  • 在新文件中进行更改。例如,要改变页眉的导角(见图6),在上面列出的类(634行左右开始)设置半径为0.1em 。
  • 保存您的工作。
  • 在你的HTML页面,更改jQuery Mobile的默认CSS文件为您的新文件的引用。
  • 在自己的设备上进行测试的说明详见 测试主题。

    图6.页眉无圆角。

    创建你自己的样本

    总的来说,我发现jQuery Mobile的默认主题设置都非常好。奈何我通常要改变样本。

    要改变样本你有两个选择。首先是在上一节所述,复制默认的CSS文件进行编辑。这会导致混乱,难以管理,特别是如果jQuery版本更新文件。

    第二种选择是利用CSS的可扩展性的优势,为你的新样本创建第二个CSS文档。好处是不会修改原始的jQuery Mobile CSS文件,而你的类也容易定义。

    创建一个独立的CSS样本文件

    按照以下步骤开始使用第二种方法创建一个新的样本:

  • 创建一个新的CSS文件名为jquery.mobile.swatch.i.css。
  • 打开jquery.mobile1.0b1.css并复制样本A的类定义(16-149行)。
  • 粘贴这些类到您的新的CSS文件。
  • 更改每个类的名称,替换–a后缀为–i。例如,更改所有实例ui-bar-a为ui-bar-i,改变ui-body-aui-body-i,等。
  • 保存您的更改。
  • 修改样式

    现在你可以开始修改CSS。你可以随意修改想要的任何变化。在这个例子中,你将更更改按钮组件的背景。控制按钮样式有三个主要CSS类它们是:

    • .ui-btn-up-i
    • .ui-btn-hover-i
    • .ui-btn-down-i

    这些类的每一个结构方式是相同的。以下是原始的.ui-btn-down-i :

    .ui-btn-down-i { border: 1px solid #000; background: #3d3d3d; font-weight: bold; color: #fff; text-shadow: 0 -1px 1px #000; background-image: -moz-linear-gradient(top, #333333, #5a5a5a); background-image: -webkit-gradient(linear,left top,left bottom, color-stop(0, #333333), color-stop(1, #5a5a5a)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#333333', EndColorStr='#5a5a5a')"; }

    按钮的背景样式是一个渐变。要改变背景颜色,需改变background, background-image,, 和 -ms-filter属性的值,对于background-image 和 -ms-filter属性,可以设置渐变的起点和结束点,例如,设置这些属性可从浅绿色(66FF79)到深绿色(00BA19)渐变,如下:

    .ui-btn-down-i { border: 1px solid #000; background:#00BA19; font-weight: bold; color:#fff; text-shadow: 0 -1px 1px #000; background-image: -moz-linear-gradient(top, #66FF79, #00BA19); background-image: -webkit-gradient(linear,left top,left bottom, color-stop(0, #66FF79),color-stop(1,#00BA19)); -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#66FF79', EndColorStr='#00BA19')"; }

    由于不同的浏览器使用不同的机制来应用渐变,你需要在三处更改颜色。在这个例子中,第一个background-image属性是Firefox浏览器,第二个是苹果的Safari和谷歌的Chrome; -ms-filter设置是为Microsoft Internet Explorer。虽然每个浏览器的语法设置略有不同,但渐变都遵循相同的模式:两种颜色的相互交融,第一种颜色是混合开始,第二个颜色是混合结束。

    每个jQuery Mobile样本有两个以上的12个不同类别,你可以编辑。在大多数情况下你不需要编辑,可以做一个类似的样本复制,编辑你要更改的属性。

    利用jQuery Mobile工作有一件很好的事情是样式都是些CSS。这给你在jQuery Mobile网站的外观感觉处理有一个很大的灵活性。例如,在f样本包括在本文的示例文件(jquery-mobile-swatch-f.css) 使用@font-face嵌入一组字体到页面中。

    使用新的样本文件

    样本的创建在数量上没有限制(然而每个主题最多26个样本)。你所要做的是将它们链接到您的网页。下面的代码,例如,连接两个样本文件jquery-mobile-swatch-i.css 和 jquery-mobile-swatch-r.css:

    <link rel="stylesheet" type="text/css" href="/blog_article/jquery.mobile-1.0b1.css"/> <link rel="stylesheet" type="text/css" href="/blog_article/jquery-mobile-swatch-i.css"/> <link rel="stylesheet" type="text/css" href="/blog_article/jquery-mobile-swatch-r.css"/>

    最后一步是在你的HTML中更改data-theme属性的引用值。在下面的代码,用新的 i 和 r 样本用来代替默认的主题:

    <div data-role="page" id="page"> <div data-role="header" data-theme="r"> <h1>Header</h1> </div> <div data-role="content" data-theme="i"> <p>Content</p> <p>&nbsp; </p> <div data-role="collapsible-set"> <div data-role="collapsible" data-theme="i"> <h3>Header</h3> <p>Content</p> </div> <div data-role="collapsible" data-collapsed="true" data-theme="i"> <h3>Header</h3> <p >Content</p> </div> <div data-role="collapsible" data-collapsed="true" data-theme="i"> <h3>Header</h3> <p>Content</p> </div> </div> </p> <p>&nbsp;<a href="#page4" data-role="button" data-icon="arrow-d" data-iconpos="left" data-theme="i">Go To Page 4</a></p> </div> <div data-role="footer" data-theme="r"> <h4>Footer</h4> </div> </div>

    展望 ThemeRoller for jQuery Mobile

    目前,在jQuery Mobile中定制主题和样本需要编辑CSS文档。Moving forward,jQuery Mobile团队正在制作一个特殊版本ThemeRoller for jQuery Mobile。据jQuery Mobile网站,ThemeRoller工具的新版本将在2011年推出jQuery Mobile的1.0版本。

    原ThemeRoller工具(jQuery不是jQuery Mobile)使您可以轻松设计一个自定义的jQuery UI主题。欲了解更多信息,请参阅 http://jqueryui.com/themeroller/。然而,jQuery Mobile采用CSS3来控制圆角,文本,阴影,背景渐变等等比原始的jQuery ThemeRoller来创建主题更为有效。

    虽然ThemeRoller移动版本肯定会使其更容易为您的移动网站创建的主题,重要的是要了解jQuery Mobile CSS工作原理及其结构。在使用ThemeRoller for jQuery Mobile之前,我鼓励你手工编写你的CSS样本文件。jQuery开发团队已经做了一项伟大的工作使其开发尽可能容易。

    测试主题

    现在你需要把这篇文章中所用的新技术深入到实践,将要创建一个基本的移动页面使用一个自定义样本。你可以使用Dreamweaver或文字编辑器来编辑 HTML和CSS文件。然而,如果可能的话,我建议你使用Dreamweaver管理一个jQuery Mobile网站。这将有助于编辑和管理文件,稍后,上传文件到移动网站。

    如果你有一个Web服务器,你可以定位该文件,然后在移动设备上访问它们。否则,你可以直接从您的硬盘驱动器打开它们。我推荐使用Chrome来进行本地测试。

    按照这些步骤来创建一个简单的页面来测试主题:

  • 如果你还没有这样做,从jQueryMobile.com下载页面下载jquery-mobile-1.0b1.zip。
  • 解压缩文件并将其放置在你的移动网站的根文件夹。
  • 创建一个名为test.html的文件。复制下面的HTML创建一个简单的jQuery Mobile页面。
  • <!DOCTYPE html /> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Sample Page</title> <link rel="stylesheet" type="text/css" href="jquery.mobile-1.0b1.css"/> <script src="http://code.jquery.com/jquery-1.6.min.js" type="text/javascript"></script> <script src="http://code.jquery.com/mobile/1.0b1/jquery.mobile-1.0b1.min.js"></script> </head> <body> <div data-role="page" id="page"> <div data-role="header" data-theme="e"> <h1>Sample Page</h1> </div> <div data-role="content"> <p>I'm a sample page!</p> </div> <a href="#page2" data-role="button" data-icon="arrow-d" data-iconpos="left" data-theme="e">Button</a> </div> </body> </html>

    上面的HTML第一行声明了该HTML文档为HTML5。老版浏览器仍然会呈现页面,但将忽略HTML5的声明。

    HEAD元素内有三个文件,形成了jQuery Mobile核心引用:

    • <link rel="stylesheet" type="text/css" href="jquery.mobile-1.0b1.css"/> • <script src="http://code.jquery.com/jquery-1.6.min.js" type="text/javascript"></script> • <script src="http://code.jquery.com/mobile/1.0b1/jquery.mobile-1.0b1.min.js"></script>

    第一行是指本地的CSS文件,表明本文件中采用jQuery主持版本,不可更改。接下来两行是JavaScript引用文件表示 jQuery核心库和jQuery Mobile库,它们都是jQuery必不可缺的文件。

    BODY 元素包含将呈现在屏幕上的内容。可以看到, DIV 元素用于页眉和内容;它们也可用于页脚和列表。jQuery Mobile页面上的更多细节,请参阅jQuery Mobile入门。

  • 保存更改,无论是在你的设备上还是Chrome均可查看该网页。你应该看到页眉和具有黄色背景的按钮,因为它们采用了e样本。
  • 直接编辑一个样本可如创建自己的主题 所述,按照下面的四个步骤。

  • 在您网站的根目录创建jquery.mobile-1.0b1.css副本,并将它命名为jquery.mobile.theme.css。
  • 打开新的文件,找到.ui-bar-e,并改变color属性的值由#333为red。
  • color: red;
  • 移除原来的jquery.mobile-1.0b1.css文件引用,替换为新文件的引用。
  • <link rel="stylesheet" type="text/css" href="/blog_article/jquery.mobile.theme.css"/>
  • 保存更改并在浏览器中刷新网页。在该示例页的顶部文本应该为红色了。
  • 现在,您可以在“创建您自己的 jQuery Mobile 色板”中创建的独立 CSS 文件中应用色板。

  • 编辑test.html并添加jquery-mobile-i.css文件的引用。
  • <link rel="stylesheet" type="text/css" href="/blog_article/jquery-mobile-i.css"/>
  • 更改按钮的data-theme的值变"e""i"。
  • <a href="#page4" data-role="button" data-icon="arrow-d" data-iconpos="left" data-theme="i">Button</a>
  • 保存更改并刷新页面。当你点击该按钮时它现在应该会为绿色。

  •     
    [2] contentprovider鐨勫涔狅紙杞彂锛
        来源: 互联网  发布时间: 2014-02-18
    contentprovider鐨勫涔狅紙杞彂锛?

    涓€銆丆ontentProvider绠€浠?/span>
    聽 聽聽 聽 褰?span >搴旂敤缁ф壙ContentProvider绫伙紝骞堕噸鍐欒绫荤敤浜庢彁渚涙暟鎹拰瀛樺偍鏁版嵁鐨勬柟娉曪紝灏卞彲浠ュ悜鍏朵粬搴旂敤鍏变韩鍏舵暟鎹€傝櫧鐒朵娇鐢ㄥ叾浠栨柟娉曚篃鍙互瀵瑰鍏变韩鏁版嵁锛屼絾鏁版嵁璁块棶鏂瑰紡浼氬洜鏁版嵁瀛樺偍鐨勬柟寮忚€屼笉鍚岋紝濡傦細閲囩敤鏂囦欢鏂瑰紡瀵瑰鍏变韩鏁版嵁锛岄渶瑕佽繘琛屾枃浠舵搷浣滆鍐欐暟鎹紱閲囩敤sharedpreferences鍏变韩鏁版嵁锛岄渶瑕佷娇鐢╯haredpreferences API璇诲啓鏁版嵁銆傝€屼娇鐢–ontentProvider鍏变韩鏁版嵁鐨勫ソ澶勬槸缁熶竴浜嗘暟鎹闂柟寮忋€?/span>
    浜屻€乁ri绫荤畝浠?/span>
    聽 聽聽 聽 Uri浠h〃浜嗚鎿嶄綔鐨勬暟鎹紝Uri涓昏鍖呭惈浜嗕袱閮ㄥ垎淇℃伅锛?.闇€瑕佹搷浣滅殑ContentProvider 锛?.瀵笴ontentProvider涓殑浠€涔堟暟鎹繘琛屾搷浣滐紝涓€涓猆ri鐢变互涓嬪嚑閮ㄥ垎缁勬垚锛?/span>

    聽 聽聽 聽 1.scheme锛欳ontentProvider锛堝唴瀹规彁渚涜€咃級鐨剆cheme宸茬粡鐢盇ndroid鎵€瑙勫畾涓猴細content://銆?/span>
    聽 聽聽 聽 2.涓绘満鍚嶏紙鎴朅uthority锛夛細鐢ㄤ簬鍞竴鏍囪瘑杩欎釜ContentProvider锛屽閮ㄨ皟鐢ㄨ€呭彲浠ユ牴鎹繖涓爣璇嗘潵鎵惧埌瀹冦€?/span>
    聽 聽聽 聽 3.璺緞锛坧ath锛夛細鍙互鐢ㄦ潵琛ㄧず鎴戜滑瑕佹搷浣滅殑鏁版嵁锛岃矾寰勭殑鏋勫缓搴旀牴鎹笟鍔¤€屽畾锛屽涓嬶細
    鈥⒙?聽聽 聽聽 聽瑕佹搷浣渃ontact琛ㄤ腑id涓?0鐨勮褰曪紝鍙互鏋勫缓杩欐牱鐨勮矾寰?/contact/10
    鈥⒙?聽聽 聽聽 聽瑕佹搷浣渃ontact琛ㄤ腑id涓?0鐨勮褰曠殑name瀛楁锛?contact/10/name
    鈥⒙?聽聽 聽聽 聽瑕佹搷浣渃ontact琛ㄤ腑鐨勬墍鏈夎褰曪紝鍙互鏋勫缓杩欐牱鐨勮矾寰?/contact
    瑕佹搷浣滅殑鏁版嵁涓嶄竴瀹氭潵鑷?span >鏁版嵁搴?/span>锛屼篃鍙互鏄枃浠剁瓑浠栧瓨鍌ㄦ柟寮忥紝濡備笅:
    瑕佹搷浣渪ml鏂囦欢涓璫ontact鑺傜偣涓嬬殑name鑺傜偣锛屽彲浠ユ瀯寤鸿繖鏍风殑璺緞锛?contact/name
    濡傛灉瑕佹妸涓€涓瓧绗︿覆杞崲鎴怳ri锛屽彲浠ヤ娇鐢║ri绫讳腑鐨刾arse()鏂规硶锛屽涓嬶細
    Uri uri = Uri.parse("content://com.changcheng.provider.contactprovider/contact")
    涓夈€乁riMatcher銆丆ontentUrist鍜孋ontentResolver绠€浠?/span>
    聽 聽聽 聽 鍥犱负Uri浠h〃浜嗚鎿嶄綔鐨勬暟鎹紝鎵€浠ユ垜浠緢缁忓父闇€瑕佽В鏋怳ri锛屽苟浠嶶ri涓?span >鑾峰彇鏁版嵁銆侫ndroid绯荤粺鎻愪緵浜嗕袱涓敤浜庢搷浣淯ri鐨勫伐鍏风被锛屽垎鍒负UriMatcher 鍜孋ontentUris 銆傛帉鎻″畠浠殑浣跨敤锛屼細渚夸簬鎴戜滑鐨?span >寮€鍙?/span>宸ヤ綔銆?/span>

    聽 聽聽 聽 UriMatcher锛氱敤浜庡尮閰峌ri锛屽畠鐨勭敤娉曞涓嬶細
    聽 聽聽 聽 1.棣栧厛鎶婁綘闇€瑕佸尮閰峌ri璺緞鍏ㄩ儴缁欐敞鍐屼笂锛屽涓嬶細
    聽 聽聽 聽 //甯搁噺UriMatcher.NO_MATCH琛ㄧず涓嶅尮閰嶄换浣曡矾寰勭殑杩斿洖鐮?-1)銆?/span>
    聽 聽聽 聽 UriMatcher聽聽uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    聽 聽聽 聽 //濡傛灉match()鏂规硶鍖归厤content://com.changcheng.sqlite.provider.contactprovider/contact璺緞锛岃繑鍥炲尮閰嶇爜涓?
    聽 聽聽 聽 uriMatcher.addURI(鈥渃om.changcheng.sqlite.provider.contactprovider鈥? 鈥渃ontact鈥? 1);//娣诲姞闇€瑕佸尮閰島ri锛屽鏋滃尮閰嶅氨浼氳繑鍥炲尮閰嶇爜
    聽 聽聽 聽 //濡傛灉match()鏂规硶鍖归厤聽 聽content://com.changcheng.sqlite.provider.contactprovider/contact/230璺緞锛岃繑鍥炲尮閰嶇爜涓?
    聽 聽聽 聽 uriMatcher.addURI(鈥渃om.changcheng.sqlite.provider.contactprovider鈥? 鈥渃ontact/#鈥? 2);//#鍙蜂负閫氶厤绗?/span>
    聽 聽聽 聽
    聽 聽聽 聽 2.娉ㄥ唽瀹岄渶瑕佸尮閰嶇殑Uri鍚庯紝灏卞彲浠ヤ娇鐢╱riMatcher.match(uri)鏂规硶瀵硅緭鍏ョ殑Uri杩涜鍖归厤锛屽鏋滃尮閰嶅氨杩斿洖鍖归厤鐮侊紝鍖归厤鐮佹槸璋冪敤addURI()鏂规硶浼犲叆鐨勭涓変釜鍙傛暟锛屽亣璁惧尮閰峜ontent://com.changcheng.sqlite.provider.contactprovider/contact璺緞锛岃繑鍥炵殑鍖归厤鐮佷负1銆?/span>

    聽 聽聽 聽 ContentUris锛氱敤浜庤幏鍙朥ri璺緞鍚庨潰鐨処D閮ㄥ垎锛屽畠鏈変袱涓瘮杈冨疄鐢ㄧ殑鏂规硶锛?/span>
    鈥⒙?聽聽 聽聽 聽withAppendedId(uri, id)鐢ㄤ簬涓鸿矾寰勫姞涓奍D閮ㄥ垎
    鈥⒙?聽聽 聽聽 聽parseId(uri)鏂规硶鐢ㄤ簬浠庤矾寰勪腑鑾峰彇ID閮ㄥ垎

    聽 聽聽 聽 ContentResolver锛氬綋澶栭儴搴旂敤闇€瑕佸ContentProvider涓殑鏁版嵁杩涜娣诲姞銆佸垹闄ゃ€佷慨鏀瑰拰鏌ヨ鎿嶄綔鏃讹紝鍙互浣跨敤ContentResolver 绫绘潵瀹屾垚锛岃鑾峰彇ContentResolver 瀵硅薄锛屽彲浠ヤ娇鐢ˋctivity鎻愪緵鐨刧etContentResolver()鏂规硶銆?ContentResolver浣跨敤insert銆乨elete銆乽pdate銆乹uery鏂规硶锛屾潵鎿嶄綔鏁版嵁銆?/span>
    鍥涖€丆ontentProvider绀轰緥绋嬪簭
    Manifest.xml涓殑浠g爜锛?/span>

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <application android:icon="@drawable/icon" android:label="@string/app_name">
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<activity android:name=".TestWebviewDemo" android:label="@string/app_name">
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<intent-filter>
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<action android:name="android.intent.action.MAIN" />
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<category android:name="android.intent.category.LAUNCHER" />
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽</intent-filter>
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<intent-filter>
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<data android:mimeType="vnd.android.cursor.dir/vnd.ruixin.login" />
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽</intent-filter>
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<intent-filter>
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<data android:mimeType="vnd.android.cursor.item/vnd.ruixin.login" />
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽</intent-filter>
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽</activity>
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<provider android:name="MyProvider" android:authorities="com.ruixin.login" />
    聽聽聽聽聽聽聽聽</application>

    闇€瑕佸湪<application></application>涓负provider杩涜娉ㄥ唽锛侊紒锛侊紒
    棣栧厛瀹氫箟涓€涓暟鎹簱鐨勫伐鍏风被锛?/span>

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class RuiXin {
    聽聽聽聽聽聽聽聽public static final String DBNAME = "ruixinonlinedb";
    聽聽聽聽聽聽聽聽public static final String TNAME = "ruixinonline";
    聽聽聽聽聽聽聽聽public static final int VERSION = 3;
    聽聽聽聽聽聽聽聽聽
    聽聽聽聽聽聽聽聽public static String TID = "tid";
    聽聽聽聽聽聽聽聽public static final String EMAIL = "email";
    聽聽聽聽聽聽聽聽public static final String USERNAME = "username";
    聽聽聽聽聽聽聽聽public static final String DATE = "date";
    聽聽聽聽聽聽聽聽public static final String SEX = "sex";
    聽聽聽聽聽聽聽聽聽
    聽聽聽聽聽聽聽聽聽
    聽聽聽聽聽聽聽聽public static final String AUTOHORITY = "com.ruixin.login";
    聽聽聽聽聽聽聽聽public static final int ITEM = 1;
    聽聽聽聽聽聽聽聽public static final int ITEM_ID = 2;
    聽聽聽聽聽聽聽聽聽
    聽聽聽聽聽聽聽聽public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.ruixin.login";
    聽聽聽聽聽聽聽聽public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.ruixin.login";
    聽聽聽聽聽聽聽聽聽
    聽聽聽聽聽聽聽聽public static final Uri CONTENT_URI = Uri.parse("content://" + AUTOHORITY + "/ruixinonline");
    }

  • 鐒跺悗鍒涘缓涓€涓暟鎹簱锛?/span>
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    public class DBlite extends SQLiteOpenHelper {
    聽聽聽聽聽聽聽聽public DBlite(Context context) {
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽super(context, RuiXin.DBNAME, null, RuiXin.VERSION);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// TODO Auto-generated constructor stub
    聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽@Override
    聽聽聽聽聽聽聽聽public void onCreate(SQLiteDatabase db) {
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// TODO Auto-generated method stub
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽db.execSQL("create table "+RuiXin.TNAME+"(" +
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽RuiXin.TID+" integer primary key autoincrement not null,"+
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽RuiXin.EMAIL+" text not null," +
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽RuiXin.USERNAME+" text not null," +
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽RuiXin.DATE+" interger not null,"+
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽RuiXin.SEX+" text not null);");
    聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽@Override
    聽聽聽聽聽聽聽聽public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// TODO Auto-generated method stub
    聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽public void add(String email,String username,String date,String sex){
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽SQLiteDatabase db = getWritableDatabase();
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽ContentValues values = new ContentValues();
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽values.put(RuiXin.EMAIL, email);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽values.put(RuiXin.USERNAME, username);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽values.put(RuiXin.DATE, date);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽values.put(RuiXin.SEX, sex);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽db.insert(RuiXin.TNAME,"",values);
    聽聽聽聽聽聽聽聽}
    }
  • 鎺ョ潃鍒涘缓涓€涓狹yprovider.java瀵规暟鎹簱鐨勬帴鍙h繘琛屽寘瑁咃細
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    public class MyProvider extends ContentProvider{
    聽聽聽聽聽聽聽聽DBlite dBlite;
    聽聽聽聽聽聽聽聽SQLiteDatabase db;
    聽聽聽聽聽聽聽聽聽
    聽聽聽聽聽聽聽聽private static final UriMatcher sMatcher;
    聽聽聽聽聽聽聽聽static{
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽sMatcher.addURI(RuiXin.AUTOHORITY,RuiXin.TNAME, RuiXin.ITEM);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽sMatcher.addURI(RuiXin.AUTOHORITY, RuiXin.TNAME+"/#", RuiXin.ITEM_ID);
    聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽@Override
    聽聽聽聽聽聽聽聽public int delete(Uri uri, String selection, String[] selectionArgs) {
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// TODO Auto-generated method stub
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽db = dBlite.getWritableDatabase();
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽int count = 0;
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽switch (sMatcher.match(uri)) {
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽case RuiXin.ITEM:
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽count = db.delete(RuiXin.TNAME,selection, selectionArgs);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽break;
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽case RuiXin.ITEM_ID:
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽String id = uri.getPathSegments().get(1);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽count = db.delete(RuiXin.TID, RuiXin.TID+"="+id+(!TextUtils.isEmpty(RuiXin.TID="?")?"AND("+selection+')':""), selectionArgs);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽break;
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽default:
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽throw new IllegalArgumentException("Unknown URI"+uri);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽getContext().getContentResolver().notifyChange(uri, null);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽return count;
    聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽@Override
    聽聽聽聽聽聽聽聽public String getType(Uri uri) {
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// TODO Auto-generated method stub
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽switch (sMatcher.match(uri)) {
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽case RuiXin.ITEM:
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽return RuiXin.CONTENT_TYPE;
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽case RuiXin.ITEM_ID:
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽return RuiXin.CONTENT_ITEM_TYPE;
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽default:
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽throw new IllegalArgumentException("Unknown URI"+uri);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽@Override
    聽聽聽聽聽聽聽聽public Uri insert(Uri uri, ContentValues values) {
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// TODO Auto-generated method stub
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽db = dBlite.getWritableDatabase();
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽long rowId;
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if(sMatcher.match(uri)!=RuiXin.ITEM){
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽throw new IllegalArgumentException("Unknown URI"+uri);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽rowId = db.insert(RuiXin.TNAME,RuiXin.TID,values);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽if(rowId>0){
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Uri noteUri=ContentUris.withAppendedId(RuiXin.CONTENT_URI, rowId);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽getContext().getContentResolver().notifyChange(noteUri, null);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽return noteUri;
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽throw new IllegalArgumentException("Unknown URI"+uri);
    聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽@Override
    聽聽聽聽聽聽聽聽public boolean onCreate() {
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// TODO Auto-generated method stub
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽this.dBlite = new DBlite(this.getContext());
    //聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 db = dBlite.getWritableDatabase();
    //聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return (db == null)?false:true;
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽return true;
    聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽@Override
    聽聽聽聽聽聽聽聽public Cursor query(Uri uri, String[] projection, String selection,
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽String[] selectionArgs, String sortOrder) {
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// TODO Auto-generated method stub
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽db = dBlite.getWritableDatabase();聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Cursor c;
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Log.d("-------", String.valueOf(sMatcher.match(uri)));
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽switch (sMatcher.match(uri)) {
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽case RuiXin.ITEM:
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽c = db.query(RuiXin.TNAME, projection, selection, selectionArgs, null, null, null);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽break;
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽case RuiXin.ITEM_ID:
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽String id = uri.getPathSegments().get(1);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽c = db.query(RuiXin.TNAME, projection, RuiXin.TID+"="+id+(!TextUtils.isEmpty(selection)?"AND("+selection+')':""),selectionArgs, null, null, sortOrder);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽break;
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽default:
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Log.d("!!!!!!", "Unknown URI"+uri);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽throw new IllegalArgumentException("Unknown URI"+uri);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽c.setNotificationUri(getContext().getContentResolver(), uri);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽return c;
    聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽@Override
    聽聽聽聽聽聽聽聽public int update(Uri uri, ContentValues values, String selection,
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽String[] selectionArgs) {
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽// TODO Auto-generated method stub
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽return 0;
    聽聽聽聽聽聽聽聽}
    }


    鏈€鍚庡垱寤烘祴璇曠被锛?/span>
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    public class Test extends Activity {
    聽聽聽聽/** Called when the activity is first created. */
    聽聽聽private DBlite dBlite1 = new DBlite(this);;
    聽聽聽聽聽聽聽聽private ContentResolver contentResolver;
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽public void onCreate(Bundle savedInstanceState) {
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽super.onCreate(savedInstanceState);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽setContentView(R.layout.main);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽//鍏堝鏁版嵁搴撹繘琛屾坊鍔犳暟鎹?/code>
    聽聽聽聽聽聽聽聽聽聽聽聽dBlite1.add(email,username,date,sex);
    聽聽聽聽聽聽聽聽聽聽聽聽//閫氳繃contentResolver杩涜鏌ユ壘
    聽聽聽聽聽聽聽聽聽聽聽聽聽contentResolver = TestWebviewDemo.this.getContentResolver();
    聽聽聽聽聽聽聽聽聽聽聽聽Cursor cursor = contentResolver.query(
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽RuiXin.CONTENT_URI, new String[] {
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽RuiXin.EMAIL, RuiXin.USERNAME,
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽RuiXin.DATE,RuiXin.SEX }, null, null, null);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽while (cursor.moveToNext()) {
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Toast.makeText(
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽TestWebviewDemo.this,
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽cursor.getString(cursor.getColumnIndex(RuiXin.EMAIL))
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+ " "
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+ cursor.getString(cursor.getColumnIndex(RuiXin.USERNAME))
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+ " "
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+ cursor.getString(cursor.getColumnIndex(RuiXin.DATE))
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+ " "
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+ cursor.getString(cursor.getColumnIndex(RuiXin.SEX)),
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Toast.LENGTH_SHORT).show();
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽startManagingCursor(cursor);聽 //鏌ユ壘鍚庡叧闂父鏍?/code>
    聽聽聽聽聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽}

    娉細涓婇潰鏄湪涓€涓▼搴忎腑杩涜鐨勬祴璇曪紝涔熷彲浠ュ啀鏂板缓涓€涓伐绋嬫潵妯℃嫙涓€涓柊鐨勭▼搴忥紝鐒跺悗灏嗕笂闈㈡煡璇㈢殑浠g爜鍔犲埌鏂扮殑绋嬪簭褰撲腑锛佽繖鏍峰氨妯℃嫙浜哻ontentprovider鐨勬暟鎹叡浜?span >鍔熻兘浜嗭紒
    鏂板缓涓伐绋嬶細TestProvider
    鍒涘缓涓€涓祴璇曠殑activity
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public class Test extends Activity {
    聽聽聽聽/** Called when the activity is first created. */
    聽聽聽聽聽聽聽聽private ContentResolver contentResolver;
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽public void onCreate(Bundle savedInstanceState) {
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽super.onCreate(savedInstanceState);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽setContentView(R.layout.main);
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
    聽聽聽聽聽聽聽聽聽聽聽聽//閫氳繃contentResolver杩涜鏌ユ壘
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽contentResolver = TestWebviewDemo.this.getContentResolver();聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
    聽聽聽聽聽聽聽聽聽聽聽聽聽Cursor cursor = contentResolver.query(
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽RuiXin.CONTENT_URI, new String[] {
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽RuiXin.EMAIL, RuiXin.USERNAME,
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽RuiXin.DATE,RuiXin.SEX }, null, null, null);
    聽聽聽聽聽聽聽聽聽聽聽聽while (cursor.moveToNext()) {
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Toast.makeText(TestWebviewDemo.this,
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽cursor.getString(cursor.getColumnIndex(RuiXin.EMAIL))
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+ " "
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+ cursor.getString(cursor.getColumnIndex(RuiXin.USERNAME))
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+ " "
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+ cursor.getString(cursor.getColumnIndex(RuiXin.DATE))
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+ " "
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽+ cursor.getString(cursor.getColumnIndex(RuiXin.SEX)),
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Toast.LENGTH_SHORT).show();
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽startManagingCursor(cursor);聽 //鏌ユ壘鍚庡叧闂父鏍?/code>
    聽聽聽聽聽聽聽聽聽聽聽聽}
    聽聽聽聽聽聽聽聽}
    杩愯姝ょ▼搴忓氨鑳藉疄鐜板叡浜暟鎹煡璇簡锛?/span>

    娉細鏂板缓鐨勭▼搴忎腑鐨刴anifest.xml涓笉闇€瑕佸provider杩涜娉ㄥ唽锛岀洿鎺ヨ繍琛屽氨琛岋紝鍚﹀垯浼氭姤閿欙紒

  •     
    [3] 在xib中按姓名搜索资源文件
        来源: 互联网  发布时间: 2014-02-18
    在xib中按名称搜索资源文件
    grep -i -r --include=*.xib "TextToFindHere"/PathToSearchHere

        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3