Android 获取异常:索引-1,大小为3

Android 获取异常:索引-1,大小为3,android,listview,Android,Listview,我用下面的代码填充一个列表。填充列表后,我将其设置为listView public void refreshSmsInbox() { ContentResolver contentResolver = getContentResolver(); // Cursor smsInboxCursor = contentResolver.query( // Uri.parse("content://sms/inbox"), null, null, null

我用下面的代码填充一个列表。填充列表后,我将其设置为listView

public void refreshSmsInbox() {
        ContentResolver contentResolver = getContentResolver();
        // Cursor smsInboxCursor = contentResolver.query(
        // Uri.parse("content://sms/inbox"), null, null, null, null);

        Cursor smsInboxCursor = getContentResolver().query(
                Uri.parse("content://sms/inbox"), new String[] {},
                "read = 1 and address='" + pre_address + "'", null, null);
        int indexBody = smsInboxCursor.getColumnIndex("body");
        int indexAddress = smsInboxCursor.getColumnIndex("address");
        if (indexBody < 0 || !smsInboxCursor.moveToFirst())
            return;
        arrayAdapter.clear();
        smsBody = new ArrayList<String>();
        String fromNumber = "";
        do {
            if (pre_address.equals(smsInboxCursor.getString(indexAddress))) {
                String str = "SMS From: "
                        + smsInboxCursor.getString(indexAddress) + "\n"
                        + smsInboxCursor.getString(indexBody) + "\n";
                fromNumber = smsInboxCursor.getString(indexAddress);
                smsBody.add(smsInboxCursor.getString(indexBody));
                // arrayAdapter.add(str);
            }
        } while (smsInboxCursor.moveToNext());
        try {
            Cursor smsInboxCursor1 = getContentResolver().query(
                    Uri.parse("content://sms/inbox"), new String[] {},
                    "read = 0 and address='" + pre_address + "'", null, null);
            indexBody = smsInboxCursor1.getColumnIndex("body");
            indexAddress = smsInboxCursor1.getColumnIndex("address");
            do {
                if (pre_address.equals(smsInboxCursor1.getString(indexAddress))) {
                    String str = "SMS From: "
                            + smsInboxCursor1.getString(indexAddress) + "\n"
                            + smsInboxCursor1.getString(indexBody) + " \n";
                    fromNumber = smsInboxCursor1.getString(indexAddress);
                    smsBody.add(smsInboxCursor1.getString(indexBody));
                    // arrayAdapter.add(str);
                }
            } while (smsInboxCursor1.moveToNext());

        } catch (Exception e) {
            Toast.makeText(this, " message is "+e.getMessage(), Toast.LENGTH_LONG).show();
        }
        arrayAdapter = new SmsArrayAdapter(this, R.layout.row_item, smsBody,
                fromNumber);
        smsListView.setAdapter(arrayAdapter);
        Toast.makeText(this, "The list size is " + smsBody.size(),
                Toast.LENGTH_LONG).show();
    }
public void refreshSmsInbox(){
ContentResolver ContentResolver=getContentResolver();
//游标smsInboxCursor=contentResolver.query(
//解析content://sms/inbox)、空、空、空、空);
游标smsInboxCursor=getContentResolver().query(
解析content://sms/inbox“”,新字符串[]{},
“read=1,address='”+pre_address+“'”,null,null);
int indexBody=smsInboxCursor.getColumnIndex(“body”);
int indexAddress=smsInboxCursor.getColumnIndex(“地址”);
if(indexBody<0 | | |!smsInboxCursor.moveToFirst())
返回;
arrayAdapter.clear();
smsBody=newarraylist();
字符串fromNumber=“”;
做{
if(pre_address.equals(smsInboxCursor.getString(indexAddress))){
String str=“SMS发件人:”
+smsInboxCursor.getString(indexAddress)+“\n”
+smsInboxCursor.getString(indexBody)+“\n”;
fromNumber=smsInboxCursor.getString(indexAddress);
添加(smsInboxCursor.getString(indexBody));
//arrayAdapter.add(str);
}
}while(smsInboxCursor.moveToNext());
试一试{
游标smsInboxCursor1=getContentResolver().query(
解析content://sms/inbox“”,新字符串[]{},
“读取=0,地址='”+pre_地址+“'”,空,空);
indexBody=smsInboxCursor1.getColumnIndex(“正文”);
indexAddress=smsInboxCursor1.getColumnIndex(“地址”);
做{
if(pre_address.equals(smsInboxCursor1.getString(indexAddress))){
String str=“SMS发件人:”
+smsInboxCursor1.getString(indexAddress)+“\n”
+smsInboxCursor1.getString(indexBody)+“\n”;
fromNumber=smsInboxCursor1.getString(indexAddress);
添加(smsInboxCursor1.getString(indexBody));
//arrayAdapter.add(str);
}
}while(smsInboxCursor1.moveToNext());
}捕获(例外e){
Toast.makeText(这个“消息是”+e.getMessage(),Toast.LENGTH_LONG.show();
}
arrayAdapter=新的SmsArrayAdapter(此,R.layout.row_项,smsBody,
fromNumber);
设置适配器(arrayAdapter);
Toast.makeText(此“列表大小为”+smsBody.size(),
Toast.LENGTH_LONG).show();
}

但我有一个例外,“索引-1请求的大小为3”。为什么我会得到例外?我怎样才能解决这个问题

int-getColumnIndex(字符串columnName)

返回给定列名的从零开始的索引,或-1(如果该列不存在)。如果希望该列存在,请改用getColumnIndexOrThrow(String),这将使错误更加清楚

即使不是该函数,getIndexOfSomething()类型的函数通常在找不到任何内容时返回-1(因为0是有效索引)。

int-getColumnIndex(String columnName)

返回给定列名的从零开始的索引,或-1(如果该列不存在)。如果希望该列存在,请改用getColumnIndexOrThrow(String),这将使错误更加清楚

即使不是该函数,getIndexOfSomething()类型的函数通常在找不到任何内容时返回-1(因为0是有效索引)。

int-getColumnIndex(String columnName)

返回给定列名的从零开始的索引,或-1(如果该列不存在)。如果希望该列存在,请改用getColumnIndexOrThrow(String),这将使错误更加清楚

即使不是该函数,getIndexOfSomething()类型的函数通常在找不到任何内容时返回-1(因为0是有效索引)。

int-getColumnIndex(String columnName)

返回给定列名的从零开始的索引,或-1(如果该列不存在)。如果希望该列存在,请改用getColumnIndexOrThrow(String),这将使错误更加清楚

即使不是该函数,getIndexOfSomething()类型的函数通常在找不到任何内容时返回-1(因为0是有效索引)。

您可以检查

if (indexBody < 0 || !smsInboxCursor.moveToFirst())
            return;
if(indexBody<0 | |!smsInboxCursor.moveToFirst())
返回;
对于
read=1
sms消息,但不检查
read=0
sms消息

如果您的目的是获取一个包含所有已读消息和所有未读消息的列表,而不是在上述检查后返回
return
,则应跳到第二部分以获取
read=0
消息,并在检查后的
smsInboxCursor1
上执行相同的空结果检查

if (indexBody < 0 || !smsInboxCursor.moveToFirst())
            return;
if(indexBody<0 | |!smsInboxCursor.moveToFirst())
返回;
对于
read=1
sms消息,但不检查
read=0
sms消息

如果您的目的是获取一个包含所有已读消息和所有未读消息的列表,而不是在上述检查后返回
return
,则应跳到第二部分以获取
read=0
消息,并在检查后的
smsInboxCursor1
上执行相同的空结果检查

if (indexBody < 0 || !smsInboxCursor.moveToFirst())
            return;
if(indexBody<0 | |!smsInboxCursor.moveToFirst())
返回;
对于
read=1
sms消息,但不检查
read=0
sms消息

如果您的目的是获取包含所有已读邮件和所有未读邮件的列表