androidの编辑联系人,姓名颠倒bug
解bug时,碰到在sim或是在本机中新建联系人,一种情况是名称为数字时,若数字中间加空格后保存,
联系人姓名显示就会颠倒过来 .android2.3
【预置条件】无
【操作步骤】联系人--添加联系人--姓名栏内输入数字--空格--继续输入数字--保存--查看
【实际结果】空格后输入的数字显示在空格前输入的数字的前面
【预期结果】应空格前输入的数字显示在前面
例:输入时(2222空格3333) 保存后显示(33332222)
原因:名字为数字并且有空格时,按照英文格式存储,就会出现倒置,存储方式是:名 姓,
解决办法:针对(android2.3) 4.0以上没仔细看是否这样的,
文件路径:packages/providers/ContactsProvider/src/com/android/providers/contacts/NameSplitter.java
其中有一个guessFullNameStyle() (类中两个同名称方法,很好辨别)
if (Character.isLetter(codePoint)) 换为
if (Character.isLetterOrDigit(codePoint)) ,即方法改下Character.isLetterOrDigit()
*******************************************************************************************************************************************************************
Character.isLetterOrDigit(int codePoint)
方法 描述:
java.lang.Character.isLetterOrDigit(int codePoint) 确定指定字符(Unicode代码点)是一个字母或数字。
被认为是一个字符是字母或数字,如果任isLetter(代码点)或isDigit的字符(代码点)返回true。
声明
以下是java.lang.Character.isLetterOrDigit()方法的声明
public static boolean isLetterOrDigit(int codePoint)
参数
codePoint - the character (Unicode code point) to be tested
返回值
此方法返回true,如果字符是字母或数字,否则返回false。
异常
NA
实例
下面的例子说明了如何使用lang.Character.isLetterOrDigit()方法。
package com.yiibai;
import java.lang.*;
public class CharacterDemo {
public static void main(String[] args) {
// create 2 int primitives cp1, cp2
int cp1, cp2;
// assign values to cp1, cp2
cp1 = 0x0033;
cp2 = 0x012b23;
// create 2 boolean primitives b1, b2
boolean b1, b2;
/**
* check if cp1, cp2 represents letter/digit and
* assign results to b1, b2
*/
b1 = Character.isLetterOrDigit(cp1);
b2 = Character.isLetterOrDigit(cp2);
String str1 = "cp1 represents a letter/digit is " + b1;
String str2 = "cp2 represents a letter/digit is " + b2;
// print b1, b2 values
System.out.println( str1 );
System.out.println( str2 );
}
}
产生结果:
cp1 represents a letter/digit is true
cp2 represents a letter/digit is false