Ваш запрос не возвращает никаких результатов здесь:
SQLiteCursor c = (SQLiteCursor) db.rawQuery("SELECT name FROM MPData WHERE "+
BaseColumns._ID+" = "+
Long.toString(id), null);
c.moveToFirst();
String r = c.getString(0);
Таким образом, последняя строка выдает ошибку. Пожалуйста, убедитесь, что запрос должен вернуть ожидаемое значение.
Кроме того, я никогда не запрашиваю свою базу данных с необработанным запросом. Попробуйте сделать это так:
String tableName = "MPData";
String [] columns = { "name" };
String where = BaseColumns._ID + "=?";
String [] whereArgs = { Long.toString(id) };
SQLiteCursor c = (SQLiteCursor) db.query(tableName, columns, where, whereArgs, null, null, null);
Afterwords сделает следующую проверку, чтобы увидеть, дал ли запрос какие-либо результаты:
if (c.getCount() > 0) {
c.moveToFirst();
r = c.getString(0);
} else {
// the query returned nothing. Do appropriate action.
}
Также никогда не забывайте закрывать свои базы данных и курсоры (иначе вы получите ошибки). Итак, окончательный вариант метода:
public String getMP_Name(long id) {
SQLiteDatabase db = this.getReadableDatabase();
String tableName = "MPData";
String [] columns = { "name" };
String where = BaseColumns._ID + "=?";
String [] whereArgs = { Long.toString(id) };
SQLiteCursor c = (SQLiteCursor) db.query(tableName, columns, where, whereArgs, null, null, null);
String r = "";
if (c.getCount() > 0) {
c.moveToFirst();
r = c.getString(0);
} else {
// the query returned nothing. Do appropriate action.
}
cursor.close();
db.close();
return r;
}
PS: Помните мои правки вашего вопроса. Такое его форматирование упрощает чтение для пользователей.