2

我正在研究安卓。在我的应用程序中,用户将通过在 edittext 中输入他们的电话号码来注册。然后将该电话号码保存在数据库中。现在,当用户使用该应用程序登录时,我会从他的手机中获取联系人列表,并将其与注册该应用程序的人进行比较。如果联系人列表中的号码与数据库中的号码匹配,那么我需要在列表视图中显示这些号码。这里的问题是,如果用户在他的联系人之前使用 +91 或 0 保存他的号码,那么数据库中的号码与联系人不匹配。当时没有显示数字。

对于这个问题,在编辑文本中输入数字之前我们是否需要保持任何警报?例如,在我给出的编辑文本中,电话号码:8923458128 并将其保存在数据库中。现在我用这个号码和我的联系人列表登录假设

  1. 9823484586
  2. +919988334856

假设上述 2 个数字存储在数据库中。但是第二次联系,用户输入为 9988334856 没有 +91。然后最后在列表视图中而不是 2 个数字仅显示 1 个数字,因为第二个数字与数据库编号不匹配。

我该如何解决这个问题?请在这方面帮助我。

4

7 回答 7

4

如果您要从数据库中获取所有电话,那么您可以使用以下代码将输入的电话与数据库中的电话匹配,使用PhoneNumberUtils.compare()

它比较电话号码 a 和 b,如果它们对于呼叫者 ID 目的足够相同,则返回 true。


private String getMatchedPhones(ArrayList<String> contactsFromDB, String phoneToMatch) {

    // Iterate all numbers and match 
    for (String numberFromDb : contactsFromDB) {
         if (PhoneNumberUtils.compare(numberFromDb, phoneToMatch)) {
             return phoneToMatch; // Or numberFromDb
         }
    }

    return null; // Or can custom msg. If not matched. 
}
于 2013-10-29T04:59:50.080 回答
1

我认为最好的方法是用 4 列创建你的表-

1)身份证 2)姓名(如果需要) 3)国家代码 4)电话号码

现在在微调器中的 UI 前缀国家代码上,并在文本视图中提供电话号码类型的字段。并在您的数据库中使用整数值来存储数字。

通过匹配您的电话号码只需通过此查询 - 1)phoneNumber = phoneNumberEditText.getText().toString(); 2) // 从数据库中读取所有联系人

    List<Contacts> number = db.getAllNumber();
                        for (final Contacts cn : number) {

                            if ((phoneNumber.equals(cn.getNumber()){
//do what you want
}
        }

谢谢!希望它会帮助你。

于 2013-10-29T04:52:24.397 回答
1

将这两行放在您的 XML 文件中的电话号码编辑文本字段中

android:inputType="numberDecimal"
android:maxLength="10"

那么他不能输入超过10个数字,只有他应该输入数字。您可以在另一个文本字段中使用国家代码并使用它进行验证。

于 2013-10-29T05:18:39.220 回答
1

对于手机号码验证 android 提供 InBuilt Patterns。但它仅适用于 API 级别 8 及更高级别。尝试以下一行代码。

 /* method for phone number validation */
private Boolean Number_Validate(String number)
{              
    return  !TextUtils.isEmpty(number) && (number.length()==10) && android.util.Patterns.PHONE.matcher(number).matches();
}

您可以通过在参数中传递数字来调用此方法,它返回真或假。

Number_Validate(number);

希望你得到你的答案。谢谢。

于 2017-02-01T04:37:50.407 回答
0

在数据库中使用 TEXT 而不是 Int。当您使用 Int 时,如果第一个数字为 0,它将忽略,因此只需使用 TEXT。

于 2013-10-29T04:44:22.760 回答
0

尝试这个

final String mobile = emobile.getText().toString();
    if (!isValidMobile(mobile)){
        emobile.setError("Invalid Mobile");
    }

private boolean isValidMobile(String mobile) {
    if (!TextUtils.isEmpty(mobile)) {
        return Patterns.PHONE.matcher(mobile).matches();
    }
    return false;
}
于 2015-03-24T13:12:41.437 回答
0

私人布尔phvalidator(字符串ph2){

    // TODO Auto-generated method stub
     String expression = "^[0-9-1+]{10,15}$";
       CharSequence inputStr = ph;
       Pattern pattern = Pattern.compile(expression,Pattern.CASE_INSENSITIVE);
       Matcher matcher = pattern.matcher(inputStr);
       return (matcher.matches())? true : false;
于 2014-11-11T06:11:28.683 回答