2012-12-03 71 views
0

先生,我有更新我的数据库的问题。我做了包含此数据的列表视图更新android中的sqlite

name 
phone number 
status 

我想,如果他在它发送的邮件带有关键字“可用”更新的个人状态和将更新我的列表视图这样

name 
phone number 
available 

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

09211234567 

发送者将返回自己的手机号码作为

+639211234567 

,所以我工作围绕这通过获取子和将电话号码剪切为“9211234567”,然后加0将其转换为“09211234567”。

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

我救仿真器的数量在我的ListView作为

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”的格式,但尽管如此,我将不会更新。删除和编辑等所有功能也不起作用并显示强制关闭。

回答

2

您需要使用PhoneNumberUtils类。

之前保存的电话号码在数据库首先将它转换为

String formattedNumber = PhoneNumberUtils.formatNumber(phonenumber); 

为了便于比较,你可以使用PhoneNumberUtils.compare

+0

原来是这样!谢谢。起初,我试图删除电话号码中第一个字符为0或者+63的字符,然后将其保存到数据库中,然后将其显示在我的列表视图中,其中0。它也有效。 –