我想阅读短信收件箱,该应用程序能够获取邮件,但它会返回一些意外的身体部位结果。以下是不需要的输出的屏幕截图。 +产生它的代码。
//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);
}
请帮助
答案 0 :(得分:1)
您看起来"body"
列的索引错误了。您应该避免使用硬编码索引,而是使用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());
}
}