当前位置: 首页 > news >正文

网页设计实训总结万能版1000字seo优化报价

网页设计实训总结万能版1000字,seo优化报价,网站制作专业的公司,项目外包app查询出来的cursor的初始位置是指向第一条记录的前一个位置的cursor.moveToFirst#xff08;#xff09;指向查询结果的第一个位置。一般通过判断cursor.moveToFirst()的值为true或false来确定查询结果是否为空。cursor.moveToNext()是用来做循环的#xff0c;一般这样来用指向查询结果的第一个位置。一般通过判断cursor.moveToFirst()的值为true或false来确定查询结果是否为空。cursor.moveToNext()是用来做循环的一般这样来用while(cursor.moveToNext()){ }cursor.moveToPrevious()是指向当前记录的上一个记录是和moveToNext相对应的cursor.moveToLast()指向查询结果的最后一条记录使用cursor可以很方便的处理查询结果以便得到想要的数据   通过以前文章的学习知道ContentResolver是通过ContentProvider来获取其他与应用程序共享的数据那么ContentResolver与ContentProvider的接口应该差不多的。其中ContentProvider负责组织应用程序的数据向其他应用程序提供数据ContentResolver则负责获取ContentProvider提供的数据修改/添加/删除更新数据等 ContentProvider 是如何向外界提供数据的 Android提供了ContentProvider一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据完全暴露出去而且ContentProviders是以类似数据库中表的方式将数据暴露也就是说ContentProvider就像一个“数据库”。那么外界获取其提供的数据也就应该与从数据库中获取数据的操作基本一样只不过是采用URI来表示外界需要访问的“数据库”。至于如何从URI中识别出外界需要的是哪个“数据库”这就是Android底层需要做的事情了不在此详细说。简要分析下ContentProvider向外界提供数据操作的接口 query(Uri, String[], String, String[], String) insert(Uri, ContentValues) update(Uri, ContentValues, String, String[]) delete(Uri, String, String[]) 这些操作与数据库的操作基本上完全一样在此不详细说需要特殊说明的地方是URI 在URI的D部分可能包含一个_ID 这个应该出现在SQL语句中的可以以种特殊的方式出现这就要求我们在提供数据的时候需要来额外关注这个特殊的信息。Android  SDK推荐的方法是在提供数据表字段中包含一个ID在创建表时INTEGER PRIMARY KEY AUTOINCREMENT标识此ID字段 ContentProvider 是如何组织数据的 组织数据主要包括存储数据读取数据以数据库的方式暴露数据。数据的存储需要根据设计的需求选择合适的存储结构首选数据库当然也可以选择本地其他文件甚至可以是网络上的数据。数据的读取以数据库的方式暴露数据这就要求无论数据是如何存储的数据最后必须以数据的方式访问。 可能还有2个问题是需要关注的。 ContentProvider是什么时候创建的是谁创建的访问某个应用程序共享的数据是否需要启动这个应用程序这个问题在Android SDK中没有明确说明但是从数据共享的角度出发ContentProvider应该是Android在系统启动时就创建了否则就谈不上数据共享了。这就要求在AndroidManifest.XML中使用元素明确定义。 可能会有多个程序同时通过ContentResolver访问一个ContentProvider会不会导致像数据库那样的“脏数据”这个问题一方面需要数据库访问的同步尤其是数据写入的同步在AndroidManifest.XML中定义ContentProvider的时候需要考虑是元素multiprocess属性的值另外一方面Android在ContentResolver中提供了notifyChange()接口在数据改变时会通知其他ContentObserver这个地方应该使用了观察者模式在ContentResolver中应该有一些类似registerunregister的接口。 Android是如何实现应用程序之间数据共享的我们以前谈到外界的程序可以通过ContentResolver接口访问ContentProvider提供的数据今天我们来谈下如何创建自己的ContentProvider来实现应用程序之间的数据共享。 一个应用程序可以创建自己的数据这个数据对该应用程序来说是私有的外界更本看不到也不知道数据是如何 存储的或者是使用数据库还是使用文件还是通过网上获得这些一切都不重要重要的是外界可以通过这一套标准及统一的接口和这个程序里的数据打交道例 如添加(insert)、删除(delete)、查询(query)、修改(update)。 Android为我们提供了ContentProvider来实现数据的共享一个程序如果想让别的程序可以操作自己的数据就定义自己的 ContentProvider然后在AndroidManifest.xml中注册其他application可以通过获取 ContentResolver通过Uri来操作上一程序的数据。 Android中的电话本等数据就是通过ContentProvider实现数据共享的系统中有很多已经存在的共享Uri。我们可以使用ContentResolver通过Uri来操作不同表的数据如Contacts.People.CONTENT_URI。 查询Content Provider的方法有两个ContentResolver的query() 和 Activity 对象的 managedQuery(),二者接收的参数均相同返回的都是Cursor 对象唯一不同的是 使用managedQuery 方法可以让Activity 来管理 Cursor 的生命周期。  被管理的Cursor 会在 Activity进入暂停状态的时候调用自己的 deactivate 方法自行卸载而在Activity回到运行状态时会调用自己的requery 方法重新查询生成的Cursor对象。如果一个未被管理的Cursor对象想被Activity管理可以调用Activity的 startManagingCursor方法来实现。 ContentProvider 什么是URI 将其分为ABCD 4个部分 A标准前缀用来说明一个Content Provider控制这些数据无法改变的content:// BURI的标识它定义了是哪个Content Provider提供这些数据。对于第三方应用程序为了保证URI标识的唯一性它      必须是一个完整的、小写的 类名。这个标识在 元素的 authorities属性中说明一般是定义该ContentProvider的包.      类的名称 ;content://com.android.calendar 系统日历的URI C路径URI下的某一个Item就像网站一样主网页下包含很多小网页。这里通俗的讲就是你要操作的数据库中表的名      字或者你也可以自己定义记得在使用的时候保持一致就ok了content://com.android.calendar/calendars D如果URI中包含表示需要获取的记录的ID则就返回该id对应的数据如果没有ID就表示返回全部 content://com.android.calendar/calendars/# #表示数据id#代表任意数字 content://com.android.calendar/calendars/* *来匹配任意文本 UriMatcher用于匹配Uri它的用法如下 1.首先把你需要匹配Uri路径全部给注册上。 1.常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码(-1)。 UriMatcher                                       uriMatcher new UriMatcher(UriMatcher.NO_MATCH); 2.如果match()方法匹content://com.android.calendar/calendars路径返回匹配码为1         uriMatcher.addURI(“content://com.android.calendar”, “calendars”, 1); 3.添加需要匹配uri如果匹配就会返回匹配码 //如果match()方法匹配  content://com.android.calendar/calendars/23路径返回匹配码为2 uriMatcher.addURI(“content://com.android.calendar”, “calendars/#”, 2); 2.注册完需要匹配的Uri后就可以使用uriMatcher.match(uri)方法对输入的Uri进行匹配如果匹 配就返回匹配码匹配码是调用 addURI()方法传入的第三个参数假设匹配  content://com.android.calendar/calendars路径返回的匹配码为1。 ContentUris用于获取Uri路径后面的ID部分它有两个比较实用的方法 withAppendedId(uri, id)用于为路径加上ID部分 parseId(uri)方法用于从路径中获取ID部分 以下是一个例子的简单说明 1 private static final String URI_AUTHORITY com.calendarwidget.provider; 2 public static final String URI_PATH2 RecordSet/#;//只是填充没有作用 3 public static final Uri CONTENT_URI Uri.parse(content:// 4 private static final UriMatcher sMatcher; 5 public static final int ALL_EVENT_RECORDS 0; 6 sMatcher new UriMatcher(UriMatcher.NO_MATCH); 7 sMatcher.addURI(URI_AUTHORITY, URI_PATH, ALL_EVENT_RECORDS); 8 sMatcher.addURI(URI_AUTHORITY, URI_PATH2, ALL_EVENT_RECORDS); 9 public boolean onCreate() 10 if (mContext null) 11 mContext getContext(); 12 } 13 Override 14 public Cursor query(Uri uri, String[] projection, String selection, 15 //匹配码 16 int match sMatcher.match(uri); 17 switch (match) 18 case ALL_EVENT_RECORDS: 19 cur loadAllCalendarEvent(this); 20 default: 21 break; 22 return cur; 23 private MatrixCursor loadAllCalendarEvent(CalendarProvider calendarProvider) 24 MatrixCursor mc new MatrixCursor(CalendarConstants.PROJECTION); 25 calendarCursor calendarProvider 26 .getContentResolver().query(content://com.android.calendar/calendars, 27 while (calendarCursor.moveToNext()) 28 //TODO 29 ..... 30 31 mc.addRow(rowObject); 32 } finally 33 calendarCursor.close(); 34 Override 35 public String getType(Uri uri) 36 37 } 38 39 Override 40 41 public Uri insert(Uri uri, ContentValues values) 42 43 Override 44 45 public int delete(Uri uri, String selection, String[] selectionArgs) 46 47 public int update(Uri uri, ContentValues values, String selection, 48 49 } 50 51 } 52 public class CalendarProvider extends ContentProvider 53 public static final String URI_PATH RecordSet; //只是填充没有作用 54 55 { 56 } 57 private Context mContext; 58 { 59 } 60 String[] selectionArgs, String sortOrder) 61 break; 62 } 63 { 64 Cursor calendarCursor null; 65 .getContext() 66 null, null, 67 null, null); / 68 } 69 return mc; 70 } 71 { 72 return null; 73 return null; 74 { 75 } 76 Override 77 String[] selectionArgs) 78 return 0; 我們很容易看出action和category是很容易匹配的而我們傳的Uri的數據怎麼匹配呢這時系統就會去調用你定義的ContentProvider中的getType取得相關的返回值來和上面的data串進行匹配當然getType的返回結果你是需要自己去定義的。但在程序中你也可以自己知道data的類型就直接匹配了intent.setType(type);   转自http://www.2cto.com/kf/201207/144022.html转载于:https://www.cnblogs.com/zl1991/p/5197367.html
http://www.pierceye.com/news/943393/

相关文章:

  • aws网站建设个体户做网站去哪里做
  • 用四字成语做网站域名好吗宁波网站推广专业服务
  • 深圳网站建设公司是网络推广网上营销
  • 网站视频站建设教程和仿qq商城版淘宝客网站源码模板+带程序后台文章dede织梦企业程序
  • 温州红酒网站建设长沙移动网站建设
  • 如何制作网站?企业网站制作步骤
  • 桓台县旅游网站建设购物网站建设技术难点
  • 单页网站推广网站qq链接怎么做
  • wordpress仿站步骤平乡网站建设
  • 青岛高端网站建设公司新网站seo技术
  • 手机网站后台甘肃网络推广技巧
  • 做co网站阿里云建站方案
  • 如何做网站首页优化怎么查网站点击量
  • 北京网站制作百度推广潜江资讯网二手房出售
  • 北京建网站软件深圳企业网站
  • 网站关键词互点备案网站简介怎么写
  • 网站建设报告书范文哈尔滨网站公司哪家好
  • 景观毕业设计作品网站公司网站销售平台建设费分录
  • 品牌网站建设还来大蝌蚪华为手机WordPress
  • 东莞制作企业网站公司网站营销活动页面制作
  • 有中文网站 怎么做英文网站企业网站建设 价格
  • 网络游戏网站开发建设工程施工合同样本
  • 陕西网站制作公司泸州中泸集团建设有限公司网站
  • 营销型网站建设的概念电子商务公司最低注册资本
  • 计划书网站推广的目录怎么做太原便宜做网站的公司哪家好
  • wordpress 直播插件麒麟seo外推软件
  • 网站检测报告哪里做寰宇seo
  • 徐州微信网站建设网站建设员课程
  • 做现货需要关注的网站wordpress+游戏网站
  • 佛山北京网站建设网络营销推广有哪些方法