当我尝试从数据库获取所有数据时,应用程序冻结

时间:2015-05-15 18:00:00

标签: android sqlite

我试图在我的应用中实现数据库,我的数据库处理程序中的一个方法是:

    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

冻结应用程序崩溃后。

提前谢谢!

2 个答案:

答案 0 :(得分:2)

从以下位置更改while循环:

while(cursor.moveToFirst());

为:

while(cursor.moveToNext());

答案 1 :(得分:0)

从源代码收集数据需要一段时间,此过程在UI线程(主线程)上运行,因此尝试在新线程上处理数据,然后将数据解析到UI。您可以参考AsyncTask和FutureTask。