0

データベースの更新に問題があります。このデータを含むリストビューを作成しました

name
phone number
status

彼が「利用可能」というキーワードを含むメッセージを送信し、このようにリストビューを更新した場合、その人のステータスを更新したいと思います

name
phone number
available

ということで、電話番号をきっかけに作ることにしました。メッセージを送信した人の電話番号がリストビューにある場合、データベースが更新されます。しかし、これが私の問題です。電話番号をリストビューにこの形式で保存した場合

09211234567

送信者は自分の電話番号を次のように返します

+639211234567

そのため、部分文字列を取得して電話番号を「9211234567」に切り取り、0を追加して「09211234567」に変換することでこれを回避しました。

ただし、データベースのステータスはまだ更新されません。しかし、エミュレータからエミュレータにSMSを送信する際に同じ手法を使用すると、問題なく動作します。

リストビューにエミュレータの数を次のように保存しました

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 に答える