2015-12-03 47 views
0

我正在开发简单的应用程序以从SQLite数据库中检索字符串并将其显示在我的主要活动的TextView中。为此,我在处理SQLite数据库的类中创建了方法,然后在主要活动内部调用了该方法,但它所做的仅仅是给出NullPointerException在Android中从SQLite返回字符串

我的SQLite数据库处理程序类中的方法。

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL(
      "CREATE TABLE " + PERSON_TABLE_NAME + 
        "(" + PERSON_COLUMN_ID + " INTEGER PRIMARY KEY, " + 
        PERSON_COLUMN_NAME + " TEXT, " + 
        PERSON_COLUMN_GENDER + " TEXT, " + 
        PERSON_COLUMN_AGE + " INTEGER)" 
    ); 

}......//////////// Some Code........... 






public String getAddress(int id) { 
    // TODO Auto-generated method stub 
    SQLiteDatabase db = this.getReadableDatabase(); 


    try { 
     Cursor cursor = db.rawQuery("SELECT * FROM " + PERSON_TABLE_NAME + " WHERE " + 
       PERSON_COLUMN_ID + "=?", new String[]{Integer.toString(id)}); 

     if (cursor != null) { 
      cursor.moveToFirst(); 
      return cursor.getString (cursor.getColumnIndex (PERSON_COLUMN_NAME)); 
     } 
    } 
    catch (Exception e) { 

     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return ""; 
} 

我的主要活动我在哪里调用方法。

button = (Button) findViewById(R.id.addNew); 
    button.setText(dbHelper.getAddress(8)); 
+0

那么问题是什么? – Buddy

+0

它只是在我启动Activity时给出NullPointerException。 – FARID

+0

请包括您的logcat显示完整的异常和堆栈跟踪。 – Buddy

回答

-1

可能是您的第一行确实包含空字符串PERSON_COLUMN_NAME(列)。 尝试增加数据库版本并再次添加行。

OR试试这个:

String[] columns = {PERSON_COLUMN_ID, PERSON_COLUMN_NAME}; 
    Cursor res = db.query(PERSON_TABLE_NAME, columns, null, null, null,null, null); 
    res.moveToFirst(); 
    do{ 
     res.moveToNext();} 
    while(res.getString(0) != id) 
    return res.getString(1); 

附:这本可以写在评论中,但由于我的名声低于50,我必须将其写为答案。

+0

的方法谢谢,你的回答帮助我了解我的问题。所以我接受它作为答案 – FARID