Android-код для извлечения данных из базы данных

1
    ParsedNotificationDataSet result = new ParsedNotificationDataSet();
    Cursor c = db.rawQuery("select * from notificationtable", null);
    if (c.getCount() > 0) {
        c.moveToFirst();
        do {
            result.setclassurl(c.getString(c.getColumnIndex("Id")));
            result.settype(c.getString(c.getColumnIndex("type")));
            result.setschool(c.getString(c.getColumnIndex("school")));
            result.setdescription(c.getString(c.getColumnIndex("description")));
            result.settitle(c.getString(c.getColumnIndex("title")));
            result.setdatePosted(c.getString(c.getColumnIndex("datePosted")));
            results.add(result);
        } while (c.moveToNext());
    }

Вот мой код для извлечения данных из базы данных. По-моему, он должен работать правильно, но в первый раз генерирует исключение java.lang.NullPointerException. После этого он работает без проблем. Какие изменения необходимо внести, чтобы решить эту проблему?

  • 0
    Можете ли вы опубликовать вывод ошибок logcat?
  • 0
    Ошибка java.lang.NullPointerException logcat
Теги:
nullpointerexception
android-cursor

2 ответа

2
Лучший ответ

Я использовал базу данных таким образом. Вы можете попробовать это. Сначала вы создаете файл класса ContactDbAdapter, как показано ниже.

public class ContactDbAdapter {

  public static final String KEY_NAME = "name";
  public static final String KEY_SCORE = "score";
  public static final String KEY_ROWID = "_id";

   private static final String DATABASE_CREATE = "create table contactdetails (_id integer primary key autoincrement,"
        + "name text not null, score integer not null);";

  private static final String DATABASE_NAME = "contacts";
  private static final String DATABASE_TABLE = "contactdetails";
  private static final int DATABASE_VERSION = 3;

  public static final String TAG = "ContactDbAdapter";

private final Context mCtx;
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;

private static class DatabaseHelper extends SQLiteOpenHelper {
    DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        db.execSQL(DATABASE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
                + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS contactdetails");
        onCreate(db);
    }

}

public ContactDbAdapter open() throws SQLiteException {
    mDbHelper = new DatabaseHelper(mCtx);       
    try {
        mDb = mDbHelper.getWritableDatabase();
        } catch (SQLiteException ex) {
          mDb = mDbHelper.getReadableDatabase();
        }
    return this;
}

public ContactDbAdapter(Context ctx) {
    this.mCtx = ctx;
}

public void close() {
    mDbHelper.close();
}

public long createContact(String name, int score) {
    ContentValues initialValues = new ContentValues();
    initialValues.put(KEY_NAME, name);
    initialValues.put(KEY_SCORE, score);       

    return mDb.insert(DATABASE_TABLE, null, initialValues);
}

public int updateEntry(long _rowIndex, String name, int score) {

      String where = KEY_ROWID + "=" + _rowIndex;

      ContentValues initialValues = new ContentValues();
      initialValues.put(KEY_NAME, name);
      initialValues.put(KEY_SCORE, score);       

      // TODO fill in the ContentValue based on the new object
      return mDb.update(DATABASE_TABLE, initialValues, where, null);
    }

public boolean deleteContact(long rowId) {
    Toast.makeText(this.mCtx, "RowID:" + rowId, Toast.LENGTH_LONG).show();
    return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}

public Cursor fetchAllContacts() {
    String order = KEY_SCORE + " DESC ";
    return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME,
            KEY_SCORE}, null, null, null, null, order);
   }

}

И чем вы можете прямо называть этот способ в вашем классе java активности.

 private ContactDbAdapter mDbHelper;
 public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       mDbHelper = new ContactDbAdapter(this);
       mDbHelper.open();

   Cursor cursor = mDbHelper.fetchAllContacts();
   startManagingCursor(cursor);
}

Итак, это приведет к извлечению всех записей из таблицы. И тогда курсор будет использоваться так же, как вы использовали.

  • 0
    ты получил это? Это работает?
3

Вы можете попробовать приведенный ниже код. Я думаю, что это сработает и не даст ошибку NullPointerException.

Cursor c = db.rawQuery("select * from notificationtable", null);

if (c.getCount() > 0) {
  while (cursor.moveToNext()) {
    result.setclassurl(c.getString(c.getColumnIndex("Id")));
    result.settype(c.getString(c.getColumnIndex("type")));
    result.setschool(c.getString(c.getColumnIndex("school")));
    result.setdescription(c.getString(c.getColumnIndex("description")));
    result.settitle(c.getString(c.getColumnIndex("title")));
    result.setdatePosted(c.getString(c.getColumnIndex("datePosted")));
    results.add(result);
  }

}
  • 0
    исключение генерируется, когда Cursor c = db.rawQuery («выберите * из уведомляемого», ноль); выполняет
  • 1
    спасибо, это сработало для меня :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню