长度= 0;指数= 5

时间:2015-04-04 20:09:04

标签: java android database sqlite

我需要知道这段代码有什么问题?

public String getLastDate(){
    SQLiteDatabase database = lecturesDB.getReadableDatabase();
    try {
        String [] a = {DATE};
        Cursor cursor = database.query(LECTURES_TABLE, a, null, null, null, null, null);
        int i = cursor.getColumnIndex(DATE);
        cursor.moveToFirst();

        String ld = cursor.getString(i);//Thu, 26 Mar 2015 17:19:56
        DateFormat format = new SimpleDateFormat("dd MMM yyyy hh:mm:ss ");
        Date date = format.parse(ld.substring(5));

        while (cursor.moveToNext()){
            String c = cursor.getString(i);
            if (format.parse(c.substring(5)).getTime()>date.getTime()){
                date = format.parse(c.substring(5));
                ld = c;
            }
        }
        return ld;
    }catch (Exception e) {
        Log.e("Mayiaz",e.getMessage());return "";
    }finally {
        database.close();
    }
}

返回"",异常显示此消息:

"04-04 19:55:45.702    1478-1634/com.mine.rbt E/Mayiaz﹕ length=0; index=5"

为什么代码会抛出异常,我该如何解决呢?

1 个答案:

答案 0 :(得分:0)

(我假设这发生在ld.substring(5)行;如果它在c.substring(5)行,请替换s/ld/c/g。请清楚地指出发生异常的行<) / p>

您无法为String.substring(i) i调用大于字符串长度的ld.substring(5)。如果ld短于5个字符(在这种情况下,它是空的),则需要避免调用Math.min(5, ld.length())

例如,您可以使用format。但请注意,这可能会导致抛出异常,因为{{1}}无法将字符串解析为日期。