【问题标题】:SQLite Database Get All Records NullPointerExceptionSQLite 数据库获取所有记录 NullPointerException
【发布时间】:2014-08-27 20:28:19
【问题描述】:

在添加/删除单行之前,SQLite 数据库可以正常工作,直到我添加了 getAllRecords 方法并让它在 Oncreate 中运行。

我花了很多时间修复它,但没有运气。

谁能告诉我我做错了什么?

MySQLite_Database:

    public static final String KEY_ID = "ROW_ID";                   // (0)
    public static final String KEY_ADD_REMOVE = "AddorRemove";      // (1)
    public static final String GROUP_POS = "Group_Position";        // (2)
    public static final String CHILD_POS = "Child_Position";        // (3)
    public static final String DATABASE_TABLE = "Group_Child_Pos_Table";
    public static final String[] ALL_KEYS = new String[] {KEY_ID, KEY_ADD_REMOVE, GROUP_POS, CHILD_POS};

    private static final String POSITION_CREATE_SQL =           
     "CREATE TABLE " + getDatabaseTable() + "("+ 
                                                KEY_ID + " INTEGER PRIMARY KEY," + 
                                                KEY_ADD_REMOVE + " TEXT," + 
                                                GROUP_POS+ " TEXT," + 
                                                CHILD_POS + " TEXT)";   

    private SQLiteDatabase db;
    SQLiteDatabase getWritableDatabase = this.getWritableDatabase();

    public MySQLite_Database(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CHILD_COUNT_CREATE);
        db.execSQL(POSITION_CREATE_SQL);
    }    

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // on upgrade drop older tables
//        db.execSQL("DROP TABLE IF EXISTS " + CHILD_COUNT_CREATE);
        db.execSQL("DROP TABLE IF EXISTS " + POSITION_CREATE_SQL);
        // create new tables
        onCreate(db);       
    }

主活动:

private MySQLite_Database MySQLITE_DATABASE;
private SQLiteDatabase  SQLite_database;
private Data_Holder_Class DATA_HOLDER_CLASS;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_expandable_list_view);             

    //Initialize variables here
    MySQLITE_DATABASE = new MySQLite_Database(this);


try {   

Open_SQLITE_DATABASE();
getAllRecords();
}       
catch (Exception e) 
{
   Log.e("ERROR", "ERROROR");
}


public void getAllRecords() {   
Cursor cursor = SQLite_database.query(MySQLite_Database.DATABASE_TABLE, null, null, null, null, null, null);
if(cursor != null)
    {
    while(cursor.moveToNext()){

        String GROUP_POSITION = cursor.getString(cursor.getColumnIndex("GROUP_POS"));
        String CHILD_POSITION = cursor.getString(cursor.getColumnIndex("CHILD_POS"));

        }
    }       

}

非常感谢

编辑:发布工作代码..

我终于发现我做错了什么......

这是完整的工作代码。这可能会在将来对其他人有所帮助。

错误代码:

    public void getAllRecords() {   
    Cursor cursor = SQLite_database.query(MySQLite_Database.DATABASE_TABLE, null, null, null, null, null, null);
    if(cursor != null)
        {
        while(cursor.moveToNext()){

            String GROUP_POSITION = cursor.getString(cursor.getColumnIndex("GROUP_POS"));
            String CHILD_POSITION = cursor.getString(cursor.getColumnIndex("CHILD_POS"));

            }
        }       
 }

好代码:

在 MySQLite_Database 中:

我创建了这个方法:

public SQLiteDatabase getWritableData() {
    SQLiteDatabase getWritableDatabase = this.getWritableDatabase();
    return getWritableDatabase;
}

在 MainActivity 中:

MySQLITE_DATABASE = new MySQLite_Database(this);

....

....

public void getAllRecords() {   
Cursor cursor = MySQLITE_DATABASE.getWritableData().query(MySQLite_Database.DATABASE_TABLE, null, null, null, null, null, null);
if(cursor != null)
    {
    while(cursor.moveToNext()){

        String GROUP_POSITION = cursor.getString(cursor.getColumnIndex(MySQLite_Database.GROUP_POS));
        String CHILD_POSITION = cursor.getString(cursor.getColumnIndex(MySQLite_Database.CHILD_POS));

        }
    }       

}

** 基本上,在 BAD CODE 中,我有

private SQLiteDatabase SQLite_database

并将其用于错误的光标。 ** 光标实际上需要这个

SQLiteDatabase getWritableDatabase = this.getWritableDatabase();

}

感谢大家的帮助,尤其是 mmlooloo。 mmlooloo 真的帮助我发现了另一个错误。我希望我的错误对其他人有所帮助。

【问题讨论】:

  • 您具体是在哪一行得到 NullPointerException?
  • 是指while条件吗?
  • android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 和光标处的第 125 行 cursor = SQLite_database.query(MySQLite_Database.DATABASE_TABLE, null, null, null, null, null, null );在 public void getAllRecords() 方法中。谢谢
  • 发布此行MainActivity_ExpandableListView.java:125
  • 跟踪 SQLite_database 变量

标签: android database sqlite android-sqlite


【解决方案1】:

更改这些行:

 String GROUP_POSITION = cursor.getString(cursor.getColumnIndex("GROUP_POS"));
 String CHILD_POSITION = cursor.getString(cursor.getColumnIndex("CHILD_POS"));

String GROUP_POSITION = cursor.getString(cursor.getColumnIndex(GROUP_POS));
String CHILD_POSITION = cursor.getString(cursor.getColumnIndex(CHILD_POS));

Cursor cursor = SQLite_database.query(MySQLite_Database.DATABASE_TABLE, null, null, null, null, null, null);

Cursor cursor = MySQLite_Database.query(MySQLite_Database.DATABASE_TABLE, null, null, null, null, null, null);

【讨论】:

  • 这些mmloolooo很好。它不会让我更改为 (GROUP_POS)。我将其改为 (MySQLite_Database.GROUP_POS)...。这也有效:....(“Group_Position”)。但是,它只解决了部分问题。另一个问题也是 Cursor cursor = SQLite_database.query(MySQLite_Database.DATABASE_TABLE, null, null, null, null, null, null) 我认为。它不会让我在任何地方初始化私有 SQLiteDatabase SQLite_database。我认为这是问题所在。我需要初始化它吗?如果是,如何?非常感谢您的帮助。我明天上班迟到了!
  • 对不起,它不会让我,因为它需要里面的对象,但我没有任何对象。我还在学习对象的东西。我要去睡觉了。工作只睡5个小时并不好玩。如果有机会,我仍然可以在工作中检查它,非常感谢
  • 完整发布您的MainActivitySQLite_Database_Helper
  • 非常感谢您的帮助。虽然它并没有帮助我抓住一切,但大部分都是。对于其他有类似问题的人,请查看我上面的工作代码。谢谢你,谢谢你
【解决方案2】:

我认为您没有指定该行需要哪些列

Cursor cursor = SQLite_database.query(MySQLite_Database.DATABASE_TABLE, null, null, null, null, null, null);

查询需要的功能:

字符串表、String[] 列、String 选择、String[] selectionArgs、String groupBy、String having、String orderBy

并且在列中放置 null,因此您必须指定所需的列

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2022-08-05
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多