0

電話のすべての連絡先を読み取るアプリケーションを作成しています。番号が特定の正規表現と一致する場合、アプリケーションはより適切な新しいものに編集されます。

私が書いたコードは、連絡先 (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 ): 例外はありませんが、コードが連絡先を更新しません ... なぜ自分の電話ではすべて正常に動作し、他のデバイスではそうではないのか理解できません!

4

0 に答える 0