0

先生,我在更新数据库时遇到问题。我制作了一个包含这些数据的列表视图

name
phone number
status

如果他发送了一条带有关键字“可用”的消息,我想更新他的状态,并且会像这样更新我的列表视图

name
phone number
available

所以我决定把电话号码作为触发器。如果发送消息的人的电话号码在我的列表视图中,它将更新数据库。但这是我的问题,如果我以这种格式将电话号码保存在我的列表视图中

09211234567

发件人将返回他们的电话号码为

+639211234567

所以我通过获取子字符串并将电话号码剪切为“9211234567”,然后添加0将其转换为“09211234567”来解决这个问题。

但是,数据库状态仍然没有更新。但是当我使用相同的技术从模拟器发送短信到模拟器时,它工作得很好。

我将列表视图中的模拟器数量保存为

5556

但模拟器返回

15555215556

所以我只是得到子字符串来得到 5556

请帮我。这是我的代码:

public static String sender;
public GroupDb info;
public String aStatus = "available";
public String nStatus = "not available";
public String addNum = "0";
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    info = new GroupDb(context);
    Bundle bundle = intent.getExtras(); 
    Object[] pdusObj = (Object[]) bundle.get("pdus"); 
    SmsMessage[] messages = new SmsMessage[pdusObj.length]; 
    for (int i = 0; i<pdusObj.length; i++) 
    { 
            messages[i] = SmsMessage.createFromPdu ((byte[]) 
            pdusObj[i]); 
            sender = messages[i].getOriginatingAddress();
    } 

    for (SmsMessage msg : messages) {
        if (msg.getMessageBody().contains("available")) {
            info.open();

            String remFirstChar = sender.substring(3);
            addNum += remFirstChar;
            Toast.makeText(context.getApplicationContext(), "received sms from: " +addNum,
                    Toast.LENGTH_LONG).show();
            //if starts with +639
            if(sender.length() == 13)
            {
                info.updateStatus(addNum, aStatus);
                Toast.makeText(context.getApplicationContext(), "addNum: " +addNum,
                        Toast.LENGTH_LONG).show();
            }
            else
            {
                Toast.makeText(context.getApplicationContext(), "sender: " +sender,
                        Toast.LENGTH_LONG).show();
                info.updateStatus(remFirstChar, aStatus);
            }
            info.close();
        }//end if - available

这是我如何更新我的状态

//update status
public void updateStatus(String mNumber, String mStatus) throws SQLException 
{
    // TODO Auto-generated method stub
    ContentValues cvUpdate = new ContentValues();
    cvUpdate.put(KEY_STATUS, mStatus);
    ourDatabase.update(DATABASE_TABLE, cvUpdate, KEY_NUMBER + "=" + mNumber, null);
}

更新:我什至尝试在列表视图中输入“+63”格式,但我仍然不会更新。删除和编辑等所有功能也不起作用并显示强制关闭。

4

1 回答 1

2

你需要使用PhoneNumberUtils类。

在将电话号码保存在数据库中之前,首先将其转换为

String formattedNumber = PhoneNumberUtils.formatNumber(phonenumber);

为了比较,您可以使用PhoneNumberUtils.compare

于 2012-12-04T06:26:04.340 回答