【问题标题】:creating a expandable list view with data in the sqlite?用sqlite中的数据创建一个可扩展的列表视图?
【发布时间】:2015-07-22 05:05:59
【问题描述】:

我想从存储在 sqlite 数据库中的数据填充可扩展列表视图。

数据库助手

public class databasehelperhome extends SQLiteOpenHelper
{
    static String DATABASE_NAME="SYSTECH_home.DB";
    public static final String TABLE_NAME="Sites";
    public static final String TABLE_NAME1="Days";
    public static final String KEY_ID="KEY_ID";
    public static final String SITE_NAME="Site_Name";
    public static final String DAY_NAME="Day_Name";
    private SQLiteDatabase mDb;

    public databasehelperhome(Context context)
    {
        super(context, DATABASE_NAME, null,1);


    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        String CREATE_TABLE="CREATE TABLE "+TABLE_NAME+" ("+KEY_ID+" INTEGER PRIMARY KEY, "+SITE_NAME+" TEXT, "+DAY_NAME+" TEXT)";
        db.execSQL(CREATE_TABLE);
    }
    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
        // TODO Auto-generated method stub

    }
    public Cursor fetchGroup() {
        String query = "SELECT * FROM Sites";
        return mDb.rawQuery(query, null);
    }

    public Cursor fetchChildren(String Site_Name) {
        String query = "SELECT * FROM Sites WHERE KEY_ID = '" + Site_Name + "'";
        return mDb.rawQuery(query, null);
    }
}

我的活动

private void fillData() {
        Cursor mGroupsCursor;
        mGroupsCursor = mHelper.fetchGroup();
        startManagingCursor(mGroupsCursor);
        mGroupsCursor.moveToFirst();

        ExpandableListView elv = (ExpandableListView) findViewById(android.R.id.list);

        madapter = new MyExpandableListAdapter(mGroupsCursor, Home.this,
            R.layout.list_group,                     // Your row layout for a group
            R.layout.list_item,                 // Your row layout for a child
            new String[] { "Site_Name" },                      // Field(s) to use from group cursor
            new int[] { R.id.lblListHeader },                 // Widget ids to put group data into
            new String[] { "Day_Name" },          // Field(s) to use from child cursors
            new int[] { R.id.lblListItem });          // Widget ids to put child data into

        elv.setAdapter(madapter);                         // set the list adapter.
        }

    public class MyExpandableListAdapter extends SimpleCursorTreeAdapter {
        public MyExpandableListAdapter(Cursor cursor, Context context,int groupLayout, 
            int childLayout, String[] groupFrom, int[] groupTo, String[] childrenFrom, 
            int[] childrenTo) {
                super(context, cursor, groupLayout, groupFrom, groupTo,
                      childLayout, childrenFrom, childrenTo);
            }
        @Override
        protected Cursor getChildrenCursor(Cursor groupCursor) {
            Cursor childCursor = mHelper.fetchChildren(groupCursor.getString(groupCursor.getColumnIndex("id_room")));            
            startManagingCursor(childCursor);
            childCursor.moveToFirst();
            return childCursor;
        }

        }

我得到的错误是这里的空指针异常 return mDb.rawQuery(query, null);

我关注了这个链接Android ExpandableListView and SQLite Database

请帮帮我。

【问题讨论】:

  • mDb 从未被分配。
  • @Nija private SQLiteDatabase mDb;被分配写
  • @Nija 首先我只是想知道我走的路是否正确
  • mDb 为 null,因此您需要在自定义 SQLiteOpenHelper 构造函数中对其进行初始化

标签: android sqlite expandablelistview


【解决方案1】:

使用下面的代码。确保在活动或片段 OnDestroy 上关闭 mHelper。

public class databasehelperhome extends SQLiteOpenHelper
{
    static String DATABASE_NAME="SYSTECH_home.DB";
    public static final String TABLE_NAME="Sites";
    public static final String TABLE_NAME1="Days";
    public static final String KEY_ID="KEY_ID";
    public static final String SITE_NAME="Site_Name";
    public static final String DAY_NAME="Day_Name";

    public databasehelperhome(Context context)
    {
        super(context, DATABASE_NAME, null,1);


    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        String CREATE_TABLE="CREATE TABLE "+TABLE_NAME+" ("+KEY_ID+" INTEGER PRIMARY KEY, "+SITE_NAME+" TEXT, "+DAY_NAME+" TEXT)";
        db.execSQL(CREATE_TABLE);
    }
    @Override
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
        // TODO Auto-generated method stub

    }
    public Cursor fetchGroup() {
        String query = "SELECT * FROM Sites";
        return getReadableDatabase().rawQuery(query, null);
    }

    public Cursor fetchChildren(String Site_Name) {
        String query = "SELECT * FROM Sites WHERE KEY_ID = '" + Site_Name + "'";
        return getReadableDatabase().rawQuery(query, null);
    }
}

【讨论】:

    【解决方案2】:

    您需要在fillData()中获取组之前编写以下代码

    databasehelperhome mHelper = new databasehelperhome(this);
    mHelper.open();
    

    【讨论】:

      猜你喜欢
      • 2018-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-12
      • 2023-03-13
      • 2015-12-19
      • 1970-01-01
      • 2015-05-11
      相关资源
      最近更新 更多