7

送信者番号に基づいて受信トレイ内のメッセージを検索するアプリケーションを作成しています。これが私のコードです:

public void onClick(View v)
{
    Toast.makeText(this, "search", Toast.LENGTH_LONG).show();
    final Uri SMS_INBOX = Uri.parse("content://sms/inbox");

    String[] colList = {"address", "body"};

    Cursor c = getContentResolver().query(SMS_INBOX, colList, null, null,"DATE desc");

    String yz= String.valueOf(c.getCount());
    Toast.makeText(this, yz, Toast.LENGTH_LONG).show();

    if(c.moveToFirst())
    {
        Toast.makeText(this, searchtxt.getText(), Toast.LENGTH_LONG).show();

        for(int i=0;i<c.getCount();i++)
        {
            String number=c.getString(c.getColumnIndexOrThrow("address")).toString();
            boolean match = number.toUpperCase().indexOf(searchtxt.getText().toString()) != -1; 

            if (match)
            {
                Toast.makeText(this, String.valueOf(i), Toast.LENGTH_LONG).show();
                String  body= c.getString(c.getColumnIndexOrThrow("body")).toString();
                tv.setText(tv.getText() + "\n" + body);
            }
            c.moveToNext();
        }
    }
    else
    {
        Toast.makeText(this, "Inside else", Toast.LENGTH_LONG).show();
    }

    c.close();
}

上記のコードは問題なく動作しますが、受信トレイ内のすべてのメッセージを取得します。送信者番号に一致するメッセージのみを取得する必要があります。そのために、LIKE 句を使用してクエリを試みましたが、それでは 0 レコードが返されます。LIKE 句を使用する正しい方法は何ですか。これは、LIKEを使用して試したコードです

String[] colList = {"address", "body"};
String[] argList = {"'%"+searchtxt.getText().toString()+"%'"};
Cursor c = getContentResolver().query(SMS_INBOX, colList, "address LIKE ?", argList,"DATE desc");

String yz= String.valueOf(c.getCount());
Toast.makeText(this, yz, Toast.LENGTH_LONG).show();

私を助けてください....ありがとう...

4

3 に答える 3

8

ジョーカーには「%」と「_」の 2 つがあります。

「%」は任意の文字列 (複数の文字) を置き換えます。

"_" は、1 つの (そして 1 つだけの) 文字を置き換えています。

例えば ​​:

LIKE 'B%' 

「B」で始まるすべてを検索できます。(「バットマン」のように);

LIKE '%B%'

「B」を含むすべてのものを見つけることができます。(「ABBA」のように);

LIKE'_B%'

1 つの文字、次に「B」を含むすべてを検索できます。(「アバクロンビーのように)」。

「%」または「_」を含む文字列を取得する場合は、エスケープ文字を使用できます。

LIKE '%#_B%' ESCAPE #

「_」の後に「B」が続く文字列を検索できます。(「TEST_BATMAN」など)。

お役に立てば幸いです。

Al_th

于 2012-07-27T11:15:02.917 に答える
2

次のEDITEDを試してください:

String[] argList = {"'%%%%"+searchtxt.getText().toString()+"%%%%'"};//TRY  THIS
                      ^^^^                                  ^^^^  // TRY THIS

Uri smsUri = Uri.parse("content://sms/inbox");
Cursor c = getContentResolver().query(smsUri, colList, "address LIKE ?", argList, "DATE");
于 2012-07-27T11:27:03.460 に答える