2010-08-23 2 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()); 
    } 

Voici mon code pour extraire des données de la base de données. À mon avis, il devrait fonctionner correctement, mais à la toute première fois, il génère une exception java.lang.NullPointerException. Après cela, il fonctionne sans problème. Quelles modifications dois-je apporter pour résoudre ce problème?Code android pour extraire les données de la base de données

+0

Pouvez-vous publier une sortie d'erreur logcat? –

+0

java.lang.NullPointerException Erreur de logcat –

Répondre

2

J'ai utilisé la base de données de cette façon. Vous pouvez essayer de cette façon. Vous devez d'abord créer un fichier de classe ContactDbAdapter comme ci-dessous ..

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); 
    } 

} 

Et que vous pouvez appeler directement cette façon que vous l'activité de la classe java.

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

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

Ainsi, tous les enregistrements de la table seront récupérés. Et puis le curseur sera utilisé de la même manière que vous avez utilisé.

+0

avez-vous eu ça? Ça marche? –

3

Vous pouvez essayer le code ci-dessous. Je pense que cela fonctionnera et ne donnera pas une erreur 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

Une exception est générée lorsque Cursor c = db.rawQuery ("select * from notificationtable", null); est en cours d'exécution –

+1

merci cela a fonctionné pour moi :) – nifo

Questions connexes