android連絡先の迅速な検索
2679 ワード
まず、連絡先を検索するにはどのくらいの条件があるかを分析してみましょう.1、名前2、番号3、ピンイン略語4、ピンインフルサイズ5、ダイヤル[つまり上のいずれかの可能性]他の検索戦略があれば、すぐに拡張できるでしょう.名前、番号、スペル、スペルは連絡先表で分析できます.それぞれdisplay_name、number、sort_keyまたはsort_key_alt. では、sql文を使用してクエリーできます.ここではフルスペルと簡略スペルだけを変換する必要があります.コードは以下の通りです.sort_keyフィールドは、「ZHU朱QIANG強」のように、必要なフルスペルと略語文字列を解析すればよい.
上のコードの結果、ZHUQIANG
ここではまず全綴りと簡略綴りを分離し、具体的なやり方は以下の通りである.
public class AnalyticString {
/**
*
* @param str
* @return
*/
public String[] getStrings(String str)
{
return str.split(" ");
}
/***
*
* @param str
* @return
*/
public boolean getLetter(String str)
{
return str.matches("^[A-Za-z]+$");
}
/**
*
* @param strs
* @param type
* @return
*/
public String getString(String[] strs,int type)
{
String[] newStrs = new String[strs.length];
int j = 0;
for(int i=0;i<strs.length;i++)
{
String firstLetter = strs[i].substring(0,1);
if(getLetter(firstLetter))
{
//type=0 out jp
if(type==0)
{
newStrs[j] = firstLetter;
}
//type=1 out qp
else
{
newStrs[j] = strs[i];
}
j++;
}
}
StringBuffer sb = new StringBuffer();
for(int k = 0; k < newStrs.length; k++){
if(newStrs[k] != null)
{
sb.append(newStrs[k]);
}
}
return sb.toString();
}
public static void main(String [] args)
{
AnalyticString as = new AnalyticString();
System.out.println(as.getString(as.getStrings("ZHU QIANG "),1));
}
}
上のコードの結果、ZHUQIANG
ここではまず全綴りと簡略綴りを分離し、具体的なやり方は以下の通りである.
ContentResolver contentResolver;
String projection[] = {Phone.CONTACT_ID,Phone.DISPLAY_NAME,Phone.NUMBER,"sort_key"};
Cursor cursor = contentResolver.query(Phone.CONTENT_URI, projection, getCondition(str), null, "sort_key COLLATE LOCALIZED asc");
// cursor List , , 。
public static String getCondition(String value)
{
String string = null;
if ("".equals(value) && null==value)
{
return string;
}
else
{
string = "display_name like '%"+ value +"%' or data1 like '%"+ value +"%' or sort_key like '%"+ value +"%'";
return string;
}
}