2015-04-04 108 views
-1

我需要知道这个代码有什么问题?长度= 0; index = 5

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" 

为什么代码抛出异常,以及如何解决它?

+0

你试过调试过吗?你抓到了什么样的“例外”?它从哪里来的? – 2015-04-04 20:13:52

+0

感谢您的重播,但问题已解决:) @GáborBakos:* – 2015-04-04 20:46:56

+0

您是否可以阐明问题和解决方案是什么或者它是否足够小以至于可能会考虑删除问题? :D – 2015-04-04 21:04:45

回答

0

(我假设,这发生在ld.substring(5)线;如果是在c.substring(5)线,更换s/ld/c/g请清楚地标明该行出现异常上。)

您不能调用String.substring(i)i大于字符串的长度。如果ld短于5个字符(在本例中为空),则需要避免调用ld.substring(5)

例如,您可以使用Math.min(5, ld.length())。但请注意,这可能会导致抛出异常,因为该字符串不能被解析为format的日期。

+0

谢谢你现在的工作很好:* – 2015-04-04 20:44:27