我一直在看这个。首先,这里有一些代码:
MyActivity.java
:
MeasurementType type = handler.getMeasurementType(DEFAULT_TYPE);
ArrayList<Unit> unitsConverted = new ArrayList<Unit>();
unitsConverted.addAll(Arrays.asList(type.getUnits()));
DataBaseHandler.java
:
public MeasurementType getMeasurementType(String measurementType) {
SQLiteDatabase db = this.getReadableDatabase();
int num = getMeasurementUnitCount(measurementType);
MeasurementType mType = MeasurementType.getMeasurementType(measurementType);
Unit[] units = new Unit[num];
String getUnits = "SELECT unit_name, view FROM " + measurementType;
Cursor cursor = db.rawQuery(getUnits, null);
for(int i = 0; i <= units.length-1; i++) {
if(cursor.moveToNext()) {
Unit u = new Unit();
u.setUnitName(cursor.getString(0));
u.setView(cursor.getInt(1));
units[i] = u;
}
}
mType.setUnits(units);
return mType;
}
我不太清楚为什么会发生这种情况但是在这一行之后:
mType.setUnits(units)
调试器告诉我该属性为null ...
num
是21是正确的,数组units
从0到20,这是正确的。
以下是我在setUnits(units)
课程中MeasurementType
方法的实现:
protected void setUnits(Unit[] passedUnits) {
units = new Unit[passedUnits.length+1];
System.arraycopy(passedUnits, 0, units, 0, passedUnits.length);
}
它也能正常工作...... 事实上,当方法getMeasurement完成并且我回到我的活动中时,它仍然表示null。
然而,逐步创建ArrayList
,然后执行:
unitsConverted.addAll(Arrays.asList(type.getUnits()));
工作正常...... ArrayList
填充正常。但有一点我不明白为什么调试器告诉我该属性是空的......它已经发生在这个特定情况已经有一段时间了,我还没有能够修复它
您可能需要了解的更多信息是MeasurementType
是一个抽象类,它基于传递给它的字符串来实例化子类,因此它肯定会创建一个子类并初始化所有内容:)