看了一些Android开源小应用的写法,感觉好像代码都比较乱,各种各样的都有
虽然自己写的代码也很糟糕,但还是能感觉到在Android开发方面的代码比JEE的要乱很多
着重点不一样吧
联系人修改
1、根据已有的数据,特别是id,查询出要修改哪几条数据,然后一条条去修改
这是一种方法,但我目前没有采取这种方法,因为服务器端返回的数据中只包含了一些数据,没有很多像主键这样的东西,所以我采取了另外一种写法
2、删除data表中有关的数据,然后再新增,这是我目前采用的方法,raw_contacts表和contacts表数据不删除,只是修改
基本代码类似下面
// 已知一个ID了,要修改他下面的数据
// 删除他下面的DATA数据,然后再新增数据
long id = 3l;
// 根据id查询出rawid
// 可能有多个rawid
Cursor cursor = rawContactsCursor(getApplicationContext(), id);
while (cursor.moveToNext()) {
long rawid = cursor.getLong(cursor
.getColumnIndex(RawContacts._ID));
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation
.newDelete(Data.CONTENT_URI).withSelection(
Data.RAW_CONTACT_ID + "=?",
new String[] { String.valueOf(rawid) })
.build());
ops.add(ContentProviderOperation
.newInsert(Data.CONTENT_URI).withValue(
Data.RAW_CONTACT_ID, rawid).withValues(
getNameNewCV()).build());
ops.add(ContentProviderOperation
.newInsert(Data.CONTENT_URI).withValue(
Data.RAW_CONTACT_ID, rawid).withValues(
getPhoneNewCV()).build());
try {
ContentProviderResult[] rst = getContentResolver()
.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e) {
e.printStackTrace();
} catch (OperationApplicationException e) {
e.printStackTrace();
}
}
private Cursor rawContactsCursor(Context ctx, long id) {
return ctx.getContentResolver().query(
ContactsContract.RawContacts.CONTENT_URI, null,
ContactsContract.RawContacts.CONTACT_ID + "=?",
new String[] { String.valueOf(id) }, null);
}
public ContentValues getNameNewCV() {
ContentValues cv = new ContentValues();
cv.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
cv.put(StructuredName.DISPLAY_NAME, "武 体");
cv.put(StructuredName.GIVEN_NAME, "体");
cv.put(StructuredName.FAMILY_NAME, "武");
return cv;
}
public ContentValues getPhoneNewCV() {
ContentValues cv = new ContentValues();
cv.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
cv.put(Phone.NUMBER, "666666");
cv.put(Phone.TYPE, Phone.TYPE_COMPANY_MAIN);
return cv;
}
备注:这样修改还是有问题的,貌似contacts会生成新的记录,这样对于需要contact_id的情况就是悲剧啊
下面删除联系人的代码也还是有问题的
// 删除联系人
// 删除Data
long id = 1l;
// 根据id查询出rawid
// 可能有多个rawid
Cursor cursor = rawContactsCursor(getApplicationContext(), id);
ArrayList<ContentProviderOperation> ops = null;
while (cursor.moveToNext()) {
long rawid = cursor.getLong(cursor
.getColumnIndex(RawContacts._ID));
ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation
.newDelete(Data.CONTENT_URI).withSelection(
Data.RAW_CONTACT_ID + "=?",
new String[] { String.valueOf(rawid) })
.build());
ops.add(ContentProviderOperation.newDelete(
ContentUris.withAppendedId(RawContacts.CONTENT_URI,
rawid)).build());
ops.add(ContentProviderOperation.newDelete(
ContentUris
.withAppendedId(Contacts.CONTENT_URI, id))
.build());
try {
ContentProviderResult[] rst = getContentResolver()
.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e) {
e.printStackTrace();
} catch (OperationApplicationException e) {
e.printStackTrace();
}
}
分享到:
相关推荐
《Struts 2.1权威指南》特点为:1.经验丰富,针对性强 ...《Struts 2.1权威指南》最后配备了几个非常常见的案例,可以让读者在掌握前而的基础知识点的情况下,将所有知识融会贯通,把基础知识点应用项目开发过程中。
【基于FE2.1的七口集线器】是一个项目,旨在通过使用FE2.1 USB芯片实现一个能够将单个USB接口扩展为七个独立接口的设备。这种集线器对于那些需要连接多个USB设备但接口有限的用户来说非常有用。下面我们将详细探讨...
DEAP2.1.zip 是一个包含DEA2.1软件的压缩包,它主要用于数据分析中的数据包络分析(Data Envelopment Analysis,简称DEA)。DEA是一种非参数的多输入多输出效率评估方法,广泛应用于各种组织和部门的效率与性能评价...
HDMI 协议 Version 2.1 HDMI(High-Definition Multimedia Interface)是一种高-definition 多媒体接口标准,用于连接设备之间的音频和视频信号传输。HDMI 协议 Version 2.1 是 HDMI 协议的最新版本,提供了更高的...
李刚的Struts 2.1权威指南:基于WebWork核心的MVC开发,写的很详细。一共有九个压缩文件。
Detours2.1的使用流程通常包括以下几个步骤: 1. **选择目标函数**:首先,你需要确定要拦截的函数。这些函数可以来自任何已加载的动态链接库(DLL)或进程中的代码。 2. **编写钩子函数**:接着,你需要编写一个...
基于FE2.1模块的USB 2.0 HUB集线器设计,通常涉及到以下几个关键知识点: 1. **FE2.1模块**:FE2.1模块是专门用于USB 2.0集线器设计的集成电路,它集成了USB 2.0协议控制器和物理层(PHY)功能。该模块负责处理USB...
5. **扩展性**:DEA2.1基于Python,这意味着用户可以利用Python的强大生态系统来扩展其功能,例如通过编写自定义脚本进行更复杂的分析。 对于初次使用DEA2.1的用户,以下是一些入门步骤: 1. **安装**:首先,你...
在"chapter1"这个子目录中,你可能找到关于Hibernate 2.1的初步教程或示例,这将帮助你了解如何配置项目、创建实体类、设置映射关系、执行基本的CRUD操作等。通过对这些内容的学习,你可以掌握Hibernate的基本用法,...
UEFI 2.1主要涵盖了以下几个方面的内容: 1. **引导流程优化**:与传统的BIOS相比,UEFI提供了一种图形化的用户界面,允许用户在开机时选择要启动的操作系统或应用程序。此外,UEFI支持预操作系统环境(Pre-OS ...
这个压缩包“JMF2.1.zip”包含了JMF2.1的安装程序和完整的jar包,使得开发者能够轻松地在Java应用程序中集成多媒体功能。 1. **Java Media Framework (JMF) 概述**: - JMF是Sun Microsystems开发的API,它允许...
DEAP2.1 的核心思想是基于CCR 模型和 BCC 模型两种不同的规模报酬假设。 DEAP2.1 操作步骤 1. 打开 DEAP-x p1,并准备需要分析的数据。 2. 将数据输入 Excel,并将其另存为 txt 文档,存至根目录。 3. 打开 Eg1-...
vCard 2.1 格式是一种基于文本的数据结构,用于表示个人联系信息。它支持多种字段类型,包括但不限于姓名、电话号码、电子邮件地址、组织名称、职位等。这种格式是纯文本的,并且采用了简单的键值对形式来存储数据,...
辅助软件 进制转换V2.1辅助软件 进制转换V2.1辅助软件 进制转换V2.1辅助软件 进制转换V2.1辅助软件 进制转换V2.1辅助软件 进制转换V2.1辅助软件 进制转换V2.1辅助软件 进制转换V2.1辅助软件 进制转换V2.1辅助软件 ...
Struts2.1是Apache软件基金会旗下Struts项目的一个版本,它是一款基于MVC(Model-View-Controller)设计模式的Java Web应用框架。Struts2的出现是为了解决Struts1在处理复杂Web应用时存在的局限性,提供更灵活、强大...
至于压缩包中的"sqlcipher2.1.exe",这很可能是SQLCipher 2.1的安装程序或可执行文件,用户可以通过运行这个文件来安装和使用SQLCipher的GUI版本。在使用前,用户需要确保其操作系统与该程序兼容,并遵循提供的安装...
这是一款基于android2.1系统下的数独游戏,是最完整版的数独游戏!
综上所述,安卓2.1刷机包旨在提供一个更加高效、节能且响应迅速的操作系统环境,通过修改和优化核心组件来提升设备性能。用户在刷入此包后,可以期待更长久的电池寿命、更快的启动时间和更流畅的应用体验,尤其是...
北斗2.1通信协议在继承北斗2.0通信协议优点的基础上,还具有以下几个显著特点: 1. **增强的数据传输速率**:北斗2.1通信协议通过采用更高效的数据压缩算法以及优化的数据包结构设计,提高了数据传输效率,使得数据...
在DOS环境中运行,用户需要熟悉命令行操作,这对于不熟悉此类界面的人来说可能会感到困扰。然而,DEAP 2.1的命令行界面也意味着它在处理计算任务时可能更加高效,因为它减少了图形元素的开销。 DEA分析工具的使用...