2012-12-03 68 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。它也有效。 –