我试图在我的应用中实现数据库,我的数据库处理程序中的一个方法是:
public List<Product> GetAllProducts(){
List<Product> prodList = new ArrayList<Product>();
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_PRODUCTS, null); // TABLE_PRODUCTS is the name of the Table(String)
if(cursor.moveToFirst()){
do{
Product product = new Product(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2), Float.parseFloat(cursor.getString(3))); // The parameters are: Id(int), Name(String), Supermarket(String), Price(float)
prodList.add(product);
} while(cursor.moveToFirst());
}
db.close();
cursor.close();
return prodList;
}
此代码应返回包含数据库中所有产品的产品列表,但每次调用此方法时,应用程序都会冻结,我会多次从Android Studio控制台获得以下输出:
05-15 14:50:38.886 4774-4790/name.com.nameI/art﹕ Background sticky concurrent mark sweep GC freed 216342(5MB) AllocSpace objects, 0(0B) LOS objects, 17% free, 22MB/26MB, paused 18.456ms total 226.283ms
冻结应用程序崩溃后。
提前谢谢!
答案 0 :(得分:2)
从以下位置更改while循环:
while(cursor.moveToFirst());
为:
while(cursor.moveToNext());
答案 1 :(得分:0)
从源代码收集数据需要一段时间,此过程在UI线程(主线程)上运行,因此尝试在新线程上处理数据,然后将数据解析到UI。您可以参考AsyncTask和FutureTask。