2014-11-28 3 views
0

Пожалуйста, посмотрите на этоЯ не понимаю, поведение этого оператора возврата

public String getDateAndTime(long rowid){ 
    CustomSQLiteOpenHelper helper = new CustomSQLiteOpenHelper(context); 
    this.db = helper.getWritableDatabase(); 
    Cursor cursor = db. 
       rawQuery("select created from testRecords where rowid = ?", new String[] { Long.toString(rowid) }); 
    if (cursor != null) 
     { 
     cursor.moveToFirst(); 
     String datandtime= null; 
     datandtime=cursor.getString(0); 
     db.close(); 
     return datandtime; 
     } 
    db.close();  
    return null; 

} 

Теперь я obviopusly хватает коснуться важной:

если курсор не равно нулю, я бы е ожидать весь Metod вернуться datandtime

НО ЭТО НЕ БЫВАЕТ ТАК:

если дворняжка sor не является нулевым, выполнение продолжается и доходит до конца return null

возвращает нуль.

Пожалуйста, что мне здесь не хватает?


Пожалуйста, зачем закрывать ???

+0

Вы уверены, что курсор на самом деле не нуль? Кроме того, вы выполняете 'dateandtime = cursor.getString (0);'. Вы уверены, что 'dateandtime' также не является нулевым? – Michael0x2a

+0

Получить декларацию даты и времени строки вне if. В выражении if asign значение dateandtime = cursor.getString (0). Поставьте оператор return return dataandtime вне if (замените return null с возвратом dataandtime). – drgPP

+4

datandtime также может быть пустым из строки datandtime = cursor.getString (0). Сначала проверьте это. Также вы уверены, что курсор не равен нулю? добавьте там код отладки, например system.out.println (курсор) – MihaiC

ответ

0

если курсор не равен нулю, он возвращает datandtime и останавливается здесь. Поэтому он не выполняет эту строку: return null;

+0

Это не делает этого ....: - (( –

+0

@LisaAnne, чем 'datandtime' null ?! – Jens

+0

Нет, это не не .... я схожу с ума ??? ;-) –

0

Он сделал запрос к базе данных и результат помещен в курсор. Если результат отличается от нуля, тогда курсор берет значение первой строки из запроса и возвращает его. С другой стороны, если результат курсора равен нулю, то оператор return равен нулю.

Имейте славный код!

+0

Этого не делает ....: - ((( –

+0

) Попробуйте отладить его и посмотрим, происходит ли что @MihaiC. Может быть, первая строка из курсора равна нулю – MuGiK

0

Проще говоря:

cursor.getString (0) равна нулю

0

Пожалуйста, попробуйте так:

public String getDateAndTime(long rowid){ 
    CustomSQLiteOpenHelper helper = new CustomSQLiteOpenHelper(context); 
    String datandtime= null; 
    this.db = helper.getWritableDatabase(); 
    Cursor cursor = db. 
       rawQuery("select created from testRecords where rowid = ?", new String[] { Long.toString(rowid) }); 
    if (cursor != null) 
     { 
     cursor.moveToFirst(); 
     datandtime=cursor.getString(0); 
     } 
    db.close();  
    return datandtime; 

} 
+0

Спасибо, я знаю, что это работает, но я не понимаю, почему мой код не работает –

+0

Я предполагаю, что это потому, что вы вынуждаете возвращать null в конце метода.Если вы хотите увидеть поток, попробуйте отладить так много других, это лучший способ понять, где это происходит. – drgPP

1

Изменение cursor.getString(0) к cursor.getString(1). Колонки базы данных всегда считаются от 1, а не 0.

Смежные вопросы