Android:“地址”的空字符串问题短信内容提供商专栏

发布于 2024-12-26 05:08:57 字数 1026 浏览 0 评论 0原文

我正在开发一个 Android 应用程序,它从内容提供商读取短信。该应用程序运行良好,并且可以很好地读取来自内容提供商的短信。但有时(非常罕见)“地址”列会为短信返回 null。

以下是示例代码 我正在使用什么:

String whereClause = "_id > " + String.valueOf(Database.getLastSmsId(this));
        Cursor cursor = getContentResolver().query(smsUri, null, whereClause, null, null);
        if(cursor.moveToFirst()) {
            do {
                int id = cursor.getInt(cursor.getColumnIndex("_id"));
            String protocol = cursor.getString(cursor.getColumnIndex("protocol"));
            String body = cursor.getString(cursor.getColumnIndex("body"));

            String address = cursor.getString(cursor.getColumnIndex("address")); // <----- Here is the problem
            // address returns as null string

            String date = cursor.getString(cursor.getColumnIndex("date"));

                Log.d(Constants.TAG, "SMS event received. address="+address);
            } while(cursor.moveToNext());
    }

我在 Motorola Driod Android v2.3.5 上遇到此问题。请指教。

阿里

I am working on a android application which read the sms from content provider. The application works fine and read sms fine from content provider. But sometime (very rare) the 'address' column returns null for the sms message.

Here is sample code What I am using:

String whereClause = "_id > " + String.valueOf(Database.getLastSmsId(this));
        Cursor cursor = getContentResolver().query(smsUri, null, whereClause, null, null);
        if(cursor.moveToFirst()) {
            do {
                int id = cursor.getInt(cursor.getColumnIndex("_id"));
            String protocol = cursor.getString(cursor.getColumnIndex("protocol"));
            String body = cursor.getString(cursor.getColumnIndex("body"));

            String address = cursor.getString(cursor.getColumnIndex("address")); // <----- Here is the problem
            // address returns as null string

            String date = cursor.getString(cursor.getColumnIndex("date"));

                Log.d(Constants.TAG, "SMS event received. address="+address);
            } while(cursor.moveToNext());
    }

I am getting this issue on Motorola Driod Android v2.3.5. Please advise.

Ali

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

氛圍 2025-01-02 05:08:57

我发现了问题。
如果开始编写然后关闭 SMS 应用程序(由于来电或任何其他原因),Android 操作系统会将消息保存为 SMS 内容提供商中的草稿。这会在 SMS 数据库中生成一个新条目,“地址”列中值为空。

萨勒曼

I found the problem.
The android OS save the message as draft in SMS content provider, if start writing and then close the SMS app (due to incoming call or any other reason). This generate a new entry in SMS database with null value in 'address' column.

Salman

原谅过去的我 2025-01-02 05:08:57

这是正常行为。在 SmsMessage 文档中找到:

以字符串形式返回此 SMS 消息的原始地址(发件人)
表单或 null(如果不可用)

如果您的应用程序稍后因 NPE 而中断,则应插入 null 检查并将地址设置为空字符串。

建议:问题应该提出一些问题,如果出现错误,您应该提供堆栈跟踪。

This is a normal behavior. Found in the SmsMessage documentation:

Returns the originating address (sender) of this SMS message in String
form or null if unavailable

If your app breaks because of a NPE later, you should insert a null check and set the address to an empty string.

An advice: A question should asked something and you should provide a stack trace if you have an error.

千仐 2025-01-02 05:08:57

如果号码被屏蔽,则可能会发生这种情况。

This can happen in case of masked number.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文