为什么从sqlite返回值会返回一个空数组

时间:2016-03-05 07:11:02

标签: android sqlite

我使用以下代码将值添加到db。

public void addComplianceAcceptability(ComplianceAcceptability complianceAcceptability) {
    SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();

    contentValues.put(KEY_ID, complianceAcceptability.getId());
    contentValues.put(KEY_COUNTRY_ID, complianceAcceptability.getCountryId());
    contentValues.put(KEY_DOMAIN_ID, complianceAcceptability.getDomainId());
    contentValues.put(KEY_UNIT_ID, complianceAcceptability.getUnitId());
    contentValues.put(KEY_COMPLIANCE_ID, complianceAcceptability.getComplianceId());
    contentValues.put(KEY_COMPLIANCE_NAME, complianceAcceptability.getCompliancenName());
    contentValues.put(KEY_COMPLIANCE_FREQUENCY, complianceAcceptability.getComplianceFrequency());
    contentValues.put(KEY_COMPLIANCE_APPLICABLE, complianceAcceptability.getComplianceApplicable());
    contentValues.put(KEY_COMPLIANCE_OPTED, complianceAcceptability.getComplianceOpted());

    sqLiteDatabase.insert(TABLE_COMPLIANCE_ACCEPTABILITY, null, contentValues);
    sqLiteDatabase.close();
}

Imm尝试使用以下代码访问值

public List<ComplianceAcceptability> getAllAcceptability() {

        List<ComplianceAcceptability> complianceAcceptabilityList = new ArrayList<>();

        String selectQuery = "SELECT * FROM " + TABLE_COMPLIANCE_ACCEPTABILITY;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        if (cursor.moveToFirst()) {
            do {
                ComplianceAcceptability complianceAcceptability = new ComplianceAcceptability();

                complianceAcceptability.setId(Integer.parseInt(cursor.getString(0)));
                complianceAcceptability.setCountryId(cursor.getString(1));
                complianceAcceptability.setDomainId(cursor.getString(2));
                complianceAcceptability.setUnitId(cursor.getString(3));
                complianceAcceptability.setComplianceId(cursor.getString(4));
                complianceAcceptability.setCompliancenName(cursor.getString(5));
                complianceAcceptability.setComplianceFrequency(cursor.getString(6));
                complianceAcceptability.setComplianceApplicable(cursor.getString(7));
                complianceAcceptability.setComplianceOpted(cursor.getString(8));

            } while (cursor.moveToNext());
        }

        return complianceAcceptabilityList;
    }

问题是它返回一个空数组。但是当我尝试在addComplianceStatus中打印contentValues时,它当然会打印所有值的数组。

2 个答案:

答案 0 :(得分:2)

您永远不会向complianceAcceptabilityList添加任何内容。您只需分配一次,然后在返回之前不执行任何操作。也许你想在每次迭代时通过光标添加complianceAcceptability

答案 1 :(得分:2)

此处您没有将complianceAcceptability对象添加到complianceAcceptabilityList,修改后的代码:

if (cursor.moveToFirst()) {
        do {
            ComplianceAcceptability complianceAcceptability = new ComplianceAcceptability();

            complianceAcceptability.setId(Integer.parseInt(cursor.getString(0)));
            complianceAcceptability.setCountryId(cursor.getString(1));
            complianceAcceptability.setDomainId(cursor.getString(2));
            complianceAcceptability.setUnitId(cursor.getString(3));
            complianceAcceptability.setComplianceId(cursor.getString(4));
            complianceAcceptability.setCompliancenName(cursor.getString(5));
            complianceAcceptability.setComplianceFrequency(cursor.getString(6));
            complianceAcceptability.setComplianceApplicable(cursor.getString(7));
            complianceAcceptability.setComplianceOpted(cursor.getString(8));
         complianceAcceptabilityList.add(complianceAcceptability);          

        } while (cursor.moveToNext());
    }