Android 读取 SMS 收件箱 returns 某些字段为空和零
Android read SMS inbox returns null and zeros for some fields
我想阅读 SMS 收件箱,该应用程序能够获取消息,但 returns 正文部分出现一些意外结果。以下是不需要的输出的屏幕截图。 + 生成它的代码。
//function to read the SMS inbox
public void fetchSMS() {
Uri uriSMSUri = Uri.parse("content://sms/inbox");
Cursor c = getContentResolver().query(uriSMSUri, null, null, null, null);
String sms = "";
while (c.moveToNext()){
sms += "From :" + c.getString(2) + " : " + c.getString(11)+"\n";
}
txtViewSMS.setText(sms);
}
输出截图
请协助
您似乎为 "body"
列设置了错误的索引。您应该避免使用 hard-coded 索引,而是使用 Cursor#getColumnIndex()
方法。例如:
sms += "From :" + c.getString(c.getColumnIndex("address")) +
" : " + c.getString(c.getColumnIndex("body")) + "\n";
此外,由于您正在拉取整个收件箱,它可能会变得相当大,这将有助于稍微优化您的方法。
public void fetchSMS() {
final Uri uriSMSUri = Uri.parse("content://sms/inbox");
final Cursor c = getContentResolver().query(uriSMSUri, null, null, null, null);
if (c != null && c.moveToFirst()) {
final StringBuilder sb = new StringBuilder();
final int addressIndex = c.getColumnIndex("address");
final int bodyIndex = c.getColumnIndex("body");
do {
sb.append("From :")
.append(c.getString(addressIndex))
.append(" : ")
.append(c.getString(bodyIndex))
.append("\n");
} while (c.moveToNext());
txtViewSMS.setText(sb.toString());
}
}
我想阅读 SMS 收件箱,该应用程序能够获取消息,但 returns 正文部分出现一些意外结果。以下是不需要的输出的屏幕截图。 + 生成它的代码。
//function to read the SMS inbox
public void fetchSMS() {
Uri uriSMSUri = Uri.parse("content://sms/inbox");
Cursor c = getContentResolver().query(uriSMSUri, null, null, null, null);
String sms = "";
while (c.moveToNext()){
sms += "From :" + c.getString(2) + " : " + c.getString(11)+"\n";
}
txtViewSMS.setText(sms);
}
输出截图
请协助
您似乎为 "body"
列设置了错误的索引。您应该避免使用 hard-coded 索引,而是使用 Cursor#getColumnIndex()
方法。例如:
sms += "From :" + c.getString(c.getColumnIndex("address")) +
" : " + c.getString(c.getColumnIndex("body")) + "\n";
此外,由于您正在拉取整个收件箱,它可能会变得相当大,这将有助于稍微优化您的方法。
public void fetchSMS() {
final Uri uriSMSUri = Uri.parse("content://sms/inbox");
final Cursor c = getContentResolver().query(uriSMSUri, null, null, null, null);
if (c != null && c.moveToFirst()) {
final StringBuilder sb = new StringBuilder();
final int addressIndex = c.getColumnIndex("address");
final int bodyIndex = c.getColumnIndex("body");
do {
sb.append("From :")
.append(c.getString(addressIndex))
.append(" : ")
.append(c.getString(bodyIndex))
.append("\n");
} while (c.moveToNext());
txtViewSMS.setText(sb.toString());
}
}