这是我的代码,用于在片段列表视图中显示产品。 这是我的列表视图片段,它只显示一个项目我无法弄清楚错误请帮我修复它
db = new SQLiteHandler(getActivity());
HashMap<String, String> recent = db.getRecentDetails();
hidePDialog();
Product product = new Product();
product.setID(recent.get("pid"));
product.setTitle(recent.get("pname"));
product.setThumbnailUrl(recent.get("pimage"));
product.setDes1(recent.get("pdesc1"));
product.setDes2(recent.get("pdesc2"));
// adding product to movies array
productList.add(product);
这是我的数据库助手部分
public HashMap<String, String> getRecentDetails() {
HashMap<String, String> recent = new HashMap<String, String>();
String selectQuery = "SELECT * FROM " + TABLE_RECENT;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// Move to first row
cursor.moveToFirst();
if (cursor.getCount() > 0) {
recent.put("pname", cursor.getString(1));
recent.put("pimage", cursor.getString(2));
recent.put("pdesc1", cursor.getString(3));
recent.put("pdesc2", cursor.getString(4));
recent.put("pid", cursor.getString(5));
}
cursor.close();
db.close();
// return user
Log.d(TAG, "Fetching address from Sqlite: " + recent.toString());
return recent;
}
答案 0 :(得分:1)
你需要移动光标,在你的代码中你只需要一行。这样做:
for(int i=0;i<cursor.getCount();i++){
recent.put("pname", cursor.getString(1));
recent.put("pimage", cursor.getString(2));
recent.put("pdesc1", cursor.getString(3));
recent.put("pdesc2", cursor.getString(4));
recent.put("pid", cursor.getString(5));
cursor.moveToNext();
}
而你只是创建了一个product
。我不知道你在尝试什么,但你的代码看起来不像是在生成多个条目。使用HashMap
,您还需要输入唯一键。即使数据库中有多个条目,HashMap
也只填充一次,下一行将覆盖现有条目。
如果您确实需要HashMap
,请使用不同的密钥或使用ArrayList
作为HashMap
类型。例如:
<ArrayList<HashMap<String,String>>
或者在填充HashMap的循环内部,您可以操作密钥:
recent.put("pname"+i, cursor.getString(1));
请参阅HashMap.put()
的API:
https://developer.android.com/reference/java/util/HashMap.html#put%28K,%20V%29
你可以这样做:
public ArrayList<HashMap<String, String>> getRecentDetails() {
ArrayList<HashMap<String,String>> hashHolder = new ArrayList<HashMap<String,String>>();
String selectQuery = "SELECT * FROM " + TABLE_RECENT;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// Move to first row
cursor.moveToFirst();
for(int i=0;i<cursor.getCount();i++) {
HashMap<String, String> recent = new HashMap<String, String>();
recent.put("pname", cursor.getString(1));
recent.put("pimage", cursor.getString(2));
recent.put("pdesc1", cursor.getString(3));
recent.put("pdesc2", cursor.getString(4));
recent.put("pid", cursor.getString(5));
hashHolder.add(recent);
Log.d(TAG, "Fetching address from Sqlite: " + recent.toString());
cursor.moveToNext();
}
cursor.close();
db.close();
// return user
return hashHolder;
}
获取数据:
db = new SQLiteHandler(getActivity());
ArrayList<HashMap<String, String>> hashHolder= db.getRecentDetails();
hidePDialog();
for(int i=0;i<hashHolder.size();i++){
HashMap<String,String> recent = hashHolder.get(i);
Product product = new Product();
product.setID(recent.get("pid"));
product.setTitle(recent.get("pname"));
product.setThumbnailUrl(recent.get("pimage"));
product.setDes1(recent.get("pdesc1"));
product.setDes2(recent.get("pdesc2"));
// adding product to movies array
productList.add(product);
}
对不起,我不能保证我的例子中没有任何错误,从头开始制作,目前无法测试。
答案 1 :(得分:0)
您似乎只获取了一行。 您将转到第一个并仅从该行获取数据。
您需要使用moveToNext()
遍历其他行,直到读取所有行。
https://developer.android.com/reference/android/database/Cursor.html