0

次のコードは、着信 SMS をリッスンし、SMS からすべてのスペースを削除してから、編集した SMS を電子メールで送信します。アプリがメールを送信できないことを除いて、すべて正常に動作します。誰かが私が間違っていることを見て、私を助けることができますか?

new Thread() { 
    public void run() {

        try {

            DatagramConnection _dc =
                (DatagramConnection)Connector.open("sms://"); 

            for(;;) { //'For-Loop' used to listen continously for incoming sms's

                Datagram d = _dc.newDatagram(_dc.getMaximumLength());                     
                _dc.receive(d);  //The sms is received                           
                byte[] bytes = d.getData();
                String address = d.getAddress(); //The address of the sms is put on a string.
                String msg = new String(bytes); //The body of the sms is put on a string.
                String msg2 = (replaceAll(msg, " ",""))  ; //


                Store store = Session.getDefaultInstance().getStore();

                Folder[] folders = store.list(Folder.SENT); 
                Folder sentfolder = folders[0]; //Retrieve the sent folder 

                Message in = new Message(sentfolder); 
                Address recipients[] = new Address[1];  

                recipients[0]= new Address("me@yahoo.com", "user"); 

                in.addRecipients(Message.RecipientType.TO, recipients); 

                in.setSubject("Incoming SMS"); //The subject of the message is added
                in.setContent("You have just received an SMS from: " + address + "/n" + "Message: " + msg2); //Here the body of the message is formed

                in.setPriority(Message.Priority.HIGH); //The priority of the message is set.

                Transport.send(in); //The message is sent

                in.setFlag(Message.Flag.OPENED, true);
                Folder folder = in.getFolder(); //The message is deleted from the sent folder
                folder.deleteMessage(in); 
            }       

        }catch (Exception me) { //All Exceptions are caught       
        }    
    }
};

public static String replaceAll(String front, String pattern, String back) {

    if (front == null) 
    return "";

    StringBuffer sb = new StringBuffer(); //A StringBufffer is created
    int idx = -1;
    int patIdx = 0;

    while ((idx = front.indexOf(pattern, patIdx)) != -1) {
        sb.append(front.substring(patIdx, idx));
        sb.append(back);
        patIdx = idx + pattern.length();
    }

    sb.append(front.substring(patIdx));
    return sb.toString();
}

ありがとう

4

1 に答える 1

0

これは実際には問題に対する答えではなく、上記の私のコメントを詳しく説明したものであり、役立つかもしれません。

コードの問題が見過ごされないように、必ず例外の catch ブロックで何かを行ってください。コードで例外が発生していない可能性がありますが、私たちが支援するために、潜在的な問題を排除する必要があります。コードが機能していないと言っているのに、空の例外ハンドラーがあるため、それは簡単です。最初に修正する領域。

最も単純なハンドラーは次のとおりです。

try {
   // try sending sms here
} catch (Exception e) {
   e.printStackTrace();
}

これをデバッガーで実行できる場合 (強くお勧めします)、e.printStackTrace()行にブレークポイントを設定して、ヒットするかどうかを確認できます。存在する場合は、 の値を調べて、eそれが何であるかを教えてください。

通常、私のプログラムでは実際にe.printStackTrace()は catch ハンドラーを使用しませんが、文字列とおそらくログ レベル (例: 情報、警告、エラー、詳細) を受け取り、ログ ファイルに書き込むログ クラスがあります。ログ ファイルは、ユーザーがテクニカル サポートに送信する電子メールに添付することができます。また、開発中にのみ機能を使用する場合は、本番環境では無効にすることができます。

とにかく、単純なものから始めて、printStackTrace()ヒットするかどうかを確認してください。その後、報告を返します。


編集:質問の後のコメントに記載されている症状から、その可能性があるようです

 String msg2 = (replaceAll(msg, " ",""))  ; //  

例外がスローされているため、メールを送信する場所に到達できません。最初の検査での実装に問題は見られreplaceAll()ませんが、それは一見の価値があるかもしれません。その実装は徹底的に単体テストされていますか?

"/n"また、おそらく が必要なコードにがあると思いますよ"\n"ね?

于 2012-07-21T23:33:18.143 に答える