Android总结

时间:2024.4.7

Android-Contentprovider

contentProvider对外共享数据,统一数据访问接口,多个项目可以访问。

1. Uri

Uri的作用为互联网上所涉及的所有资源——HTML文档,图像,视频片段,程序等,提供一种统一 的唯一标识。

Uri的组成:

协议(scheme)+该资源的主机名称或IP地址+主机资源的主题地址

示例:/u.mp4

将一个字符串转换成Uri。Uri.parse();

Uri uri=Uri.parse(“content://com.example.hxx/word/2”);

2. ContentProvider

一:开发ContentProvider步骤:

1.定义自己的ContentProvider类,并继承ContentProvider基类,并实现oncreat,gettype,insert,delete,query,update,方法。

2.向Android清单文件(AndroidManifest.xml)的“application”标签注册此ContentProvider。需注册“name”和“authorities”属性。

为了实现Contentprovider的方法,需要确定能匹配的Uri,确定Uri参数所操作的数据需用到UriMatcher工具类。

UriMatcher的两个方法:

1,addURI(String authorities,String path,int code):此方法用于注册访问ContentProvider的Uri。

Static{

UriMatcher matcher=new UriMatcher(UriMatcher.NO_MATCH);

Matcher.addURI(“com.example.hxx”,”info”,1);

Matcher.addURI(“com.example.hxx”,”info/#”,0);

}

2,matcher(Uri uri)根据注册的Uri返回指定的标识码。对于输入的Uri进行匹配,若找不到,返回-1。

Switch(matcher.matcher(uri)){

case 1:

***

break;

case 0:

***

break;

default:

throw new IllegalArgumentException("URI" + uri + "无法解析!"); }

定义ContentProvider类先注册ContentProvider

Static{

UriMatcher matcher=new UriMatcher(UriMatcher.NO_MATCH);

Matcher.addURI(“com.example.hxx”,”info”,1);

Matcher.addURI(“com.example.hxx”,”info/#”,0);

}

实现方法:

···Gettype方法:返回指定Uri参数对应的数据的MIME类型

Switch(matcher.matcher(uri)){

case 1:

return “vnd.android.cursor.dir/info”

break;

case 0:

return “vnd.android.cursor.item/info”

break;

default:

throw new IllegalArgumentException("URI" + uri + "无法解析!"); }

···Insert方法:添加数据

Uri insert(Uri uri, ContentValues values)

参数1:需要操作的ContentProvider数据的Uri

参数2:需要插入的值

根据传入的Uri判断指定的标识码,并进行匹配,执行添加数据操作。

switch (matcher.match(uri)) {

case CONTACTS:

long id = 添加数据;//返回指定列的ID值

Uri insertUri = ContentUris.withAppendedId(uri, id);

return insertUri;

default:

throw new IllegalArgumentException("URI" + uri + "无法解析!");

}

···Update方法:更新数据

int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) 参数1:需要操作的ContentProvider数据的Uri

参数2:需要修改的值

参数3:需要修改条件语句

参数4:需要修改条件对应的值

int rowNum = 0;

switch (matcher.match(uri)) {

case CONTACTS:

rowNum =更新数据;//返回删除的行数

return rowNum;

case CONTACT:

long id = ContentUris.parseId(uri);

String whereClause = "_id=" + id;

if (selection != null) {

whereClause += "and" + selection;

}

rowNum =更新数据;//返回删除的行数

return rowNum;

default:

} throw new IllegalArgumentException("URI" + uri + "无法解析!");

···delete方法:删除数据

int delete(Uri uri, String selection, String[] selectionArgs)

参数1:需要操作的ContentProvider数据的Uri

参数2:删除条件语句

参数3:删除条件中占位符对应值

int rowNum = 0;

switch (matcher.match(uri)) {

case CONTACTS:

rowNum = 删除数据;

return rowNum;

case CONTACT:

long id = ContentUris.parseId(uri);

String whereClause = "_id=" + id;

if (selection != null) {

whereClause += "and" + selection;

}

rowNum = 删除数据;

return rowNum;

default:

throw new IllegalArgumentException("URI" + uri + "无法解析!");

}

···query方法:查询数据

Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 参数1:需要操作的ContentProvider数据的Uri

参数2:查询显示的列

参数3:查询条件

参数4:查询条件对应值

参数5:排序

Cursor cur;

switch (matcher.match(uri)) {

case CONTACTS:

cur=查询数据;

return cur; case CONTACT: long id = ContentUris.parseId(uri); String whereClause = "_id=" + id; if (selection != null) { whereClause += "and" + selection; } cur=查询数据; return cur; default: } throw new IllegalArgumentException("URI" + uri + "无法解析!");

二:在项目中使用定义好的ContentProvider要用到ContentResolver对象 Activity.getContentResolver方法获取ContentResolver对象。

ContentResolver对象操作数据的方法:

Insert():添加数据

Update():更新数据

Delete():删除数据

Query():查询数据

3. ContentObserver

对ContentProvider数据进行监听

注册监听:registerContentObserver

重写OnChange()方法

数据变化通知:

getContext().getContentResolver().notifyChange(uri, null);

Uri为数据变化的ContentProvider的Uri。

4. 系统ContentProvider

管理联系人的Uri:

content://contacts/people //本地联系人列表信息

content://contacts/phones //本地联系人列表信息

content://call_log/calls/ //本地通话记录

管理系统短信的Uri;

content://sms

系统多媒体的Uri管理:

存储在外部内存上的音频,图片,视频文件ContentProvider的Uri: MediaStore.Audio. Media/Images/Video.EXTERNAL_CONTENT_URI 存储在手机上的音频,图片,视频文件ContentProvider的Uri: MediaStore.Audio. Media/Images/Video.INTERNAL_CONTENT_URI


第二篇:android Handler整理总结


android:Handler整理总结 收藏

首先声明,以下是我转载整理的。

感谢

/Android_Tutor/archive/2010/05/08/5568806.aspx

/20100814/45.html

这些朋友的共享!

当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无响应,如果时间过长,程序还会挂掉。Handler就是把这些功能放到一个单独的线程里执行,与Activity互不影响。

我们简单用例子来说明:

小实例一:5秒钟更新一下Title(标题),如图:

代码如下:

view plaincopy to clipboardprint?

package com.android.tutor;

import java.util.Timer;

import java.util.TimerTask;

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

public class HandlerDemo extends Activity {

// title为setTitle方法提供变量,这里为了方便我设置成了int型

private int title = 0;

private Handler mHandler = new Handler() {

public void handleMessage(Message msg) {

switch (msg.what) {

case 1:

updateTitle();

break;

}

};

};

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Timer timer = new Timer();

timer.scheduleAtFixedRate(new MyTask(), 1, 5000); }

private class MyTask extends TimerTask {

@Override

public void run() {

Message message = new Message();

message.what = 1;

mHandler.sendMessage(message);

}

}

public void updateTitle() {

setTitle("Welcome to Mr Wei's blog " + title);

title++;

}

}

package com.android.tutor;

import java.util.Timer;

import java.util.TimerTask;

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

public class HandlerDemo extends Activity {

// title为setTitle方法提供变量,这里为了方便我设置成了int型 private int title = 0;

private Handler mHandler = new Handler() {

public void handleMessage(Message msg) {

switch (msg.what) {

case 1:

updateTitle();

break;

}

};

};

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Timer timer = new Timer();

timer.scheduleAtFixedRate(new MyTask(), 1, 5000);

}

private class MyTask extends TimerTask {

@Override

public void run() {

Message message = new Message();

message.what = 1;

mHandler.sendMessage(message);

}

}

public void updateTitle() {

setTitle("Welcome to Mr Wei's blog " + title);

title++;

}

}

小实例二:用Handler更新进度条ProgressBar ;如图:当按开始按钮时,进度条会每隔500毫秒加1,直到加到100或者按停止时停止

代码:

view plaincopy to clipboardprint?

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ProgressBar;

public class main extends Activity {

/** Called when the activity is first created. */

ProgressBar pb1;

Handler handle = new Handler();

// 新建一个Handler对象

Button b1;

Button b2;

@Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.main);

pb1 = (ProgressBar) findViewById(R.id.pb1); pb1.setProgress(0);

b1 = (Button) findViewById(R.id.b1);

b1.setOnClickListener(b1Lis);

b2 = (Button) findViewById(R.id.b2);

b2.setOnClickListener(b2Lis);

}

private OnClickListener b1Lis = new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub handle.post(add);

// 开始执行add

}

};

private OnClickListener b2Lis = new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

handle.removeCallbacks(add);

// 停止执行

pb1.setProgress(0);

}

};

int pro = 0;

Runnable add = new Runnable() {

// 定义add

@Override

public void run() {

// TODO Auto-generated method stub

pro = pb1.getProgress() + 1;

pb1.setProgress(pro);

setTitle(String.valueOf(pro));

if (pro < 100) {

handle.postDelayed(add, 500);

// 如果进度小于100,,则延迟500毫秒后重复执行add }

}

};

}

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.ProgressBar;

public class main extends Activity {

/** Called when the activity is first created. */

ProgressBar pb1;

Handler handle = new Handler();

// 新建一个Handler对象

Button b1;

Button b2;

@Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); pb1 = (ProgressBar) findViewById(R.id.pb1); pb1.setProgress(0); b1 = (Button) findViewById(R.id.b1); b1.setOnClickListener(b1Lis); b2 = (Button) findViewById(R.id.b2); b2.setOnClickListener(b2Lis); } private OnClickListener b1Lis = new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub handle.post(add); // 开始执行add } }; private OnClickListener b2Lis = new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub handle.removeCallbacks(add); // 停止执行 pb1.setProgress(0); } }; int pro = 0; Runnable add = new Runnable() { // 定义add @Override public void run() { // TODO Auto-generated method stub pro = pb1.getProgress() + 1; pb1.setProgress(pro); setTitle(String.valueOf(pro)); if (pro < 100) { handle.postDelayed(add, 500);

// 如果进度小于100,,则延迟500毫秒后重复执行add }

}

};

}

本文来自CSDN博客,转载请/wufenglong/archive/2010/08/27/5843513.aspx 标明处出:

更多相关推荐:
Android总结

Android总结第一步Android1在Windows下搭建Android开发环境以及HelloWorld程序搭建Android的开发环境以及写一个简单的示例程序在Windows下搭建Android开发环境A...

android基本知识点总结

一android四大组件ActivityServiceBroadcastReceiverContentProvider二Activity生命周期三横竖屏切换时的生命周期1新建一个Activity并把各个生命周期...

一周学习Android 的总结

初学Android的总结一对Android的初步认识有以下几方面1Android是什么Android是Google在20xx年11月首次发布的当时它被定位成一款针对智能手机的操作系统现在是一个专门针对移动设备的...

android开发总结

Android开发简介Android应用程序的五大基本组件Activity应用表示层基类Activity一个活动表示一个可视化的用户界面关注一个用户从事的事件例如一个活动可能表示一个用户可选择的菜单项列表或者可...

Android个人学习笔记总结

Android学习笔记总结第一步Android1在Windows下搭建Android开发环境以及HelloWorld程序搭建Android的开发环境以及写一个简单的示例程序在Windows下搭建Android开...

Android学习心得

Android学习心得这学期我们新开了一门课程android的研发在老师们的介绍下我们了解android的开发环境以及控件的功能刚开始接触Android觉得既陌生又亲切陌生在于没有学过具体的开发软件亲切在于它在...

Android 实训总结

Android实训总结XXXX三周的Android实训已接近尾声在这短暂的三周之内有成功有失败有喜悦有辛酸在实训老师的带领下我学会了很多我们小组在实训老师的协助下最终成功的完成实训项目实训前二周由于我在java...

Android_培训总结

Android实训总结三周的Android实训已接近尾声在这短暂的三周之内有成功有失败有喜悦有辛酸在实训老师的带领下我学会了很多我们小组在实训老师的协助下最终成功的完成实训项目实训前二周由于我在java基础方面...

Android学习笔记总结初学者必看

Android学习笔记总结第一步Android1在Windows下搭建Android开发环境以及HelloWorld程序搭建Android的开发环境以及写一个简单的示例程序在Windows下搭建Android开...

Qualcomm平台android开发总结

1高通平台android开发总结711搭建高通平台环境开发环境712搭建高通平台环境开发环境7121高通android智能平台概述71211什么是L4REXBREWAMSS以及相互之间的关系7122选择合适的源...

Android知识总结

1AppWidget与AndroidWidgetAppWidget是桌面组件的一部分是Home的一个插件AndroidWidget是Android控件的聚合包它提供Android常用的控件如TextViewBu...

Android顶岗实习总结

无锡科技职业学院实习时间学院专业名称学号姓名指导老师实习地点顶岗实习总结20xx119阮籍与服务外包学院计算机通信张锐俞辉北京翡翠教育科技有限公司上海分公司20xx919100120xx0一实训地点北京翡翠科技...

android总结(40篇)