我创建了一种从数据库中检索所有收藏夹的方法,但是没有获取任何数据。
我添加了一个Log.e来检查数据计数,其数据如下:
I/SQLiteAssetHelper: successfully opened database FoodDB.db
fav: []: : is count
所以请告知我错误的确切位置,以及如何从活动中调用该方法以获取所有数据。
getAllFavorites方法
public List<Favorites> getAllFavorites (String foodId) {
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String[] sqlSelect = {"FoodId", "Name", "Image", "Description", "Components",
"MenuId", "UserName"};
String sqlTable = "Favorites";
qb.setTables(sqlTable);
Cursor c = qb.query(db, sqlSelect, "FoodId=?", new String[]{foodId}, null, null, null);
final List<Favorites> result = new ArrayList<>();
if (c.moveToFirst()) {
do {
result.add(new Favorites(
c.getString(c.getColumnIndex("FoodId")),
c.getString(c.getColumnIndex("Name")),
c.getString(c.getColumnIndex("Image")),
c.getString(c.getColumnIndex("Description")),
c.getString(c.getColumnIndex("Components")),
c.getString(c.getColumnIndex("MenuId")),
c.getString(c.getColumnIndex("UserName"))
));
} while (c.moveToNext());
}
db.close();
return result;
}
activity_favorites.JAVA
public class FavoritesActivity extends AppCompatActivity {
RecyclerView recyclerView;
RecyclerView.LayoutManager layoutManager;
FavoritesAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_favorites);
recyclerView = findViewById(R.id.recycler_favorites);
recyclerView.setHasFixedSize(true);
LinearLayoutManager myLayoutManager = new LinearLayoutManager(this);
myLayoutManager.setReverseLayout(true);
myLayoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(myLayoutManager);
loadFavorites();
}
private void loadFavorites() {
adapter = new FavoritesAdapter(this, new Database(this).getAllFavorites("FoodId"));
adapter.notifyDataSetChanged();
recyclerView.setAdapter(adapter);
Toast.makeText(getApplicationContext(), "check is it working?", Toast.LENGTH_SHORT).show();
Log.e("fav: "+new Database(this).getAllFavorites("FoodId"), ": is count");
}
}
答案 0 :(得分:1)
考虑到调试确认您已经在数据库中存在数据并且可以访问它,并且看来您正在按照正确的步骤使用RecyclerView,那么问题很可能出在收藏夹适配器上。
>作为显示此内容的一种快速方法,以下步骤和代码应显示一个列表,但使用ArrayAdapter以及ListView和股票布局。
将ListView添加到您的layout.activity_favorites.xml
中,并为其指定 listview 的ID(确保它是可见的)。
添加4行作为类变量(即在FavoritesAdapter
之后):-
ListView mListView; 列出mFavoritesList; ArrayAdapter mAdapter; 数据库mDBHlpr;
根据添加在1(在setContentView(R.layout.activity_favorites);
之后)的列表视图的ID,添加以下行来设置mListView:-
mListView = this.findViewById(R.id.listview);
mDBHlpr = new Database(this);
mFavoritesList = mDBHlpr.getAllFavorites("doesn't matter as not used as yet");
mAdapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,mFavoritesList);
mListView.setAdapter(mAdapter);
Cursor c = qb.query(db, sqlSelect, null, null, null, null, null);
4运行该应用程序,希望您能从:-
注意mjt.usingrecyclerviews.Favorites是程序包/类的名称。也就是说,它列出了BUT行,因为ArrayAdapter的默认值是使用toString方法,并且在收藏夹类中都没有定义它使用默认值。因此,包装类,然后是各个对象的标识符。
此屏幕截图是在两次运行代码/应用程序之后,每次都向Favoorites表中添加3行,从而在ListView中添加了6行。
将以下方法添加到“收藏夹”类中:-
public String toString() {
return "Id=" + String.valueOf(this.foodid) + " Name=" + this.name + " etc.....";
}
结果:-
如前所述,适配器很可能出现此问题。因此,我建议将此标记为已回答(即,您现在可以从数据库中检索数据,或者至少知道它在那里),然后询问另一个问题,这一次为适配器提供了代码。
答案 1 :(得分:0)
下载“ sqlite expert personal”并将您的db文件复制到“ sqlite expert personal”。您可以在其中查看表和值,还可以写下与在应用程序中编写的查询相同的查询,并确定其是否正常运行。
答案 2 :(得分:-1)
尝试这种方式..
public List<Comment> getComments(int itemId) {
List<Comment> commentList = new ArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
String selectQuery = "SELECT * FROM " + COMMENTS_TABLE_NAME + " WHERE item_id=" + itemId;
Cursor c = db.rawQuery(selectQuery, null);
if (c != null) {
c.moveToFirst();
while (c.isAfterLast() == false) {
Comment comment = new Comment();
comment.id = (c.getInt(c.getColumnIndex("id")));
comment.comment = (c.getString(c.getColumnIndex("comment")));
commentList.add(comment);
c.moveToNext();
}
}
c.close();
db.close();
return commentList;
}