電話のすべての連絡先を読み取るアプリケーションを作成しています。番号が特定の正規表現と一致する場合、アプリケーションはより適切な新しいものに編集されます。
私が書いたコードは、連絡先 (galaxy s2 と連絡先に多くのテスト番号を入れた) を使用して電話で完全に実行されますが、galaxy s3 でパターン例外をスローします (別の連絡先リストを使用しますが、私が言ったように、sim に入れました)多くのテスト連絡先と、考えられるすべてのテストケースをカバーしたと思います)
それ以外の場合、解析がうまくいけば、アプリケーションが写真付きの連絡先を読み取るとすぐにギャラクシー s3 で番号の更新が終了しますが、プログラムはすべての連絡先が読み取られるまで作業を続けます (クエリでは、表示番号、番号、ID のみを要求します)。 、写真なし、メールなしなど)
ヒントはありますか?
解析に関連するコードは次のとおりです。
public NumberParser(String idSim)
{
AssociationManaging am = new AssociationManaging();
prefix = am.getAssociatedPrefix(idSim).trim();
internazionalePrivataConPrefissoRegEx = prefix+"0039[0-9]+";
nazionalePrivataRegEx = prefix+"[0-9]+";
internazionaleAziendale1RegEx = "\\+39[0-9]+";
internazionaleAziendale2RegEx = "0039[0-9]+";
internazionalePrivataPausaRegEx = prefix+"0039[0-9]+,[0-9]";
nazionalePrivataPausaRegEx = prefix+"[0-9]+,[0-9]";
nazionaleAziendaleRegEx = "[0-9]+";
}
/* examples of possible numbers
String nazionaleAziendale ="333123123";
String internazionaleAziendale1 = "+39333123123";
String internazionaleAziendale2 = "0039333123123";
String nazionalePrivata = prefix+"333123123";
String nazionalePrivataPausa = prefix + "333123123,3";
String internazionalePrivataConPrefisso = prefix+"0039333123123";
String internazionalePrivataConPausa = prefix + "0039333123123,3";
*/
public String getPrefixMatch(String number)
{
String type = "unknown";
if(check(internazionalePrivataConPrefissoRegEx, number))
return prefix+"0039";
else if(check(nazionalePrivataRegEx, number))
return prefix;
else if(check(internazionaleAziendale1RegEx, number))
return "+39";
else if(check(internazionaleAziendale2RegEx, number))
return "0039";
else if(check(internazionalePrivataPausaRegEx, number))
return prefix + "0039_" + number.substring(number.length() -1, number.length());
else if(check(nazionalePrivataPausaRegEx, number))
return prefix + "_" +number.substring(number.length() -1, number.length());
else if(check(nazionaleAziendaleRegEx, number))
return "";
return type;
}
public static boolean check(String regex, String input){
if (Pattern.matches(regex, input))
return true;
else
return false;
}
編集: .apk を友人に送信し、彼は試しました (古い lg ): 例外はありませんが、コードが連絡先を更新しません ... なぜ自分の電話ではすべて正常に動作し、他のデバイスではそうではないのか理解できません!