2010-08-23 3 views
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. После этого он работает без проблем. Какие изменения необходимо внести, чтобы решить эту проблему?Код Android для извлечения данных из базы данных

+0

Можете ли вы вывести ошибку ошибки logcat? –

+0

java.lang.NullPointerException ошибка logcat –

ответ

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 ("select * from notificationtable", null); выполняет –

+1

спасибо, что это сработало для меня :) – nifo

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