我的Android应用程序遇到了问题。我想检索列的所有值,但我只获取其中一个值。我已经尝试了一切,但我仍然找不到解决方案。这是我的数据库中的代码:
public Cursor returnAllColumns() {
Cursor cursor = mDb.query(FTS_VIRTUAL_TABLE,
new String[] {KEY_ROWID,
KEY_NAME,
KEY_CUSTOMER, PROTEIN, TOTAL_CARB}
, null, null, null, null, null);
if (cursor != null) {
cursor.moveToNext();
}
return cursor;
}
这是我在另一个类中的代码,它显示了包含所有值的toast。
mDbHelper = new DBAdapter(DatabaseFiller.this);
mDbHelper.open();
Cursor c = mDbHelper.returnAllColumns();
String protein = c.getString(c.getColumnIndexOrThrow("protein"));
Toast.makeText(getApplicationContext(), protein, Toast.LENGTH_SHORT).show();
我得到的只是Protein = 0
。我应该得到的是0, 0, 0, 0, 0, 0,...
。我不知道我在这里做错了什么。在我的ListView中,我做对了。它在那里工作得很好。这是我的ListView代码:
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Get the cursor, positioned to the corresponding row in the result set
cursor = (Cursor) mListView.getItemAtPosition(position);
//mListView.setItemChecked(position, true);
// Get the state's capital from this row in the database.
String name = cursor.getString(cursor.getColumnIndexOrThrow("customer"));
String caloriescursor = cursor.getString(cursor.getColumnIndexOrThrow("name"));
String totalfat = cursor.getString(cursor.getColumnIndexOrThrow("address"));
String satfatcursor = cursor.getString(cursor.getColumnIndexOrThrow("city"));
String state = cursor.getString(cursor.getColumnIndexOrThrow("state"));
String zipCode = cursor.getString(cursor.getColumnIndexOrThrow("zipCode"));
然后返回带有一堆值的Toast。关于这个问题的任何帮助将不胜感激。
答案 0 :(得分:0)
如果光标返回多行,则需要循环游标,并在循环中构建输出。
继续调用c.moveToNext()
,直到它返回false。
答案 1 :(得分:0)
在getAllColumns()
中,您的查询语句是正确的。它实际上会获取所有列。后面的if
语句只是将其指向第一个结果。然后在指向第一个结果时返回光标。您应该取出if
语句,因为它没有做任何有用的事情。
当试图展示吐司时,你需要这样的东西:
Cursor c = mDbHelper.returnAllColumns();
ArrayList<String> protein = new ArrayList<>();
while (c.moveToNext()) {
protein.add(c.getString(c.getColumnIndexOrThrow("protein")));
}
Toast.makeText(getApplicationContext(), TextUtils.join(", ", protein), Toast.LENGTH_SHORT).show();
答案 2 :(得分:0)
在我这样做之前我遇到了同样的问题:
if (!cursor.moveToFirst()) {
Log.d(LOG_TAG, "=== cursor not moveToFirst() ===");
return null;
}
Log.d(LOG_TAG, "=== reading cursor of getAll() ===");
Log.d(LOG_TAG, String.valueOf(cursor));
List<Trip> trips = new ArrayList<>();
while (!cursor.isAfterLast()) {
trips.add(cursorToTrip(cursor));
cursor.moveToNext();
}
cursor.moveToNext()
永远不会检查第一个元素。所以我检查过的课程不在最后一个,然后我添加了对象并移动到下一个。
就是这样! :)