我要做的是从另一个数据库管理器类中检索ArrayList。不幸的是,我所能做的只是因为经理类不能静态工作是在另一个类中创建一个实例,然后调用该方法。然后我开始将同一个实例传递给请求SQLiteDatabase
对象的方法。现在我已经完成了一个混乱的绑定,当我真正想做的就是检索arraylist以显示SQL列中的元素列表视图。
在显示(输出)活动中,我尝试使用ListView来显示SQL数据库中包含的元素。目前,我只关注一栏(作业名称)。我的方法涉及使用内置于数据库管理器类中的get
方法,但由于您无法静态引用该方法,我尝试通过创建该管理器类的实例来使用该方法。这将返回Inputted对象的ArrayList(每个包含一个名称)。它似乎有效,但在运行程序时,LogCat抗议我以递归方式调用getDatabase。在线查看之后,人们建议我通过更改方法来解决问题,以便将(SQLiteDatabase db)
作为参数,以便在管理器中抛出相同的数据库。现在我在这里感到困惑 - 我不确定从显示活动传递给这个方法的内容。从我从评论中听到的内容来看,我的get
方法也没有正确地遍历SQL数据库也没有帮助。如果你能解决这个难题,那么谢谢你!
我会发布我的代码进行诊断,希望外部视图能够准确显示我在这里尝试的所有内容。
public Cursor getAssignmentNames(SQLiteDatabase db) {
return db.query(false, ASSIGNMENT_TABLE, COLUMN_TITLES,
" WHERE " + ASSIGNMENT_NAME + " ", null, null, null, " ORDER BY "+ASSIGNMENT_URGENCY_RATING, null);
}
/
public ArrayList<Inputted> getListOfAssignments (SQLiteDatabase db) {
Cursor names = getAssignmentNames(db);
ArrayList<Inputted> assList = new ArrayList<Inputted>();
names.moveToFirst();
while (!cursorsAreAfterLast(names) ) {
int go = 0;
assList.add(new Inputted(names.getString(go))
names.moveToNext();
go++;
}
return assList;
}
/
DBRecordsLayer assignmentRecords = new DBRecordsLayer(this,
"assignment.db", null, 1);
ArrayList<Inputted> assList = DBRecordsLayer.getListOfAssignments(assignmentRecords);
答案 0 :(得分:1)
你的代码有点令人困惑......在while循环的每次迭代中,你都在递增游标(names.moveToNext());你也在增加go。
结果将是:
第一次迭代:您正在从第一个查询的第一列获取数据
第二次迭代:您正在从第二个查询的第二列获取数据
等...
我假设您希望每次迭代都从数据库的同一列读取数据。
试试这个:
public ArrayList<Inputted> getListOfAssignments (SQLiteDatabase db) {
Cursor names = getAssignmentNames(db);
ArrayList<Inputted> assList = new ArrayList<Inputted>();
names.moveToFirst();
columnContainingStringToSendToInputtedConstructor = x; //replace the x with column you need from your table
while (!names.isAfterLast()) {
assList.add(new Inputted(names.getString(columnContainingStringToSendToInputtedConstructor));
names.moveToNext();
}
}