Câu hỏi Android - tải các giá trị từ cơ sở dữ liệu sqlite vào một mảng


Tôi mới sử dụng Android . Tôi có một ứng dụng làm việc với SQLite DB. Tôi cần phải đẩy các giá trị từ cơ sở dữ liệu vào một danh sách các đối tượng kiểu. Mã tôi sử dụng được đưa ra ở đây.

 private ArrayList<objectname> objectList  = new ArrayList<objectname>();
 //function used to get values from database
   public ArrayList<objectname> getResults() {

    MyDb db = new MyDb(this); //my database helper file
    db.open();
    Cursor c = db.getAllValues(); //function to retrieve all values from a table- written in MyDb.java file
    if (c.moveToFirst())
    {
        do {         
            String date = c.getString(c.getColumnIndex("date"));

            try
            {
                ob = new objectname();
                ob.setDate(c.getString(c.getColumnIndex("date")));// setDate function is written in Class file
                objectList.add(ob);
            }
            catch (Exception e) {
             Log.e(MY_DEBUG_TAG, "Error " + e.toString());
            }

         } while (c.moveToNext());
    }
       db.close();
       return objectList;
}

Điều này không hoạt động chính xác. Không hiển thị bất kỳ lỗi nào nhưng tôi không nhận được các giá trị trong danh sách đối tượngListList

Xin hãy giúp tôi .. Cảm ơn trước ..


7
2018-03-30 05:51


gốc


Tham số nào "này" thỏa mãn khi tạo cá thể quản lý DB của bạn? Nhà xây dựng trông như thế nào? - AlleyOOP


Các câu trả lời:


thử cái này:

private ArrayList<objectname> objectList  = getResults();

private ArrayList<objectname> getResults() {

    MyDb db = new MyDb(this); //my database helper file
    db.open(); 

    ArrayList<objectname> resultList = new ArrayList<objectname>();


    Cursor c = db.getAllValues(); //function to retrieve all values from a table- written in MyDb.java file
    while (c.moveToNext())
    {
        String date = c.getString(c.getColumnIndex("date"));

        try
        {
            ob = new objectname();
            ob.setDate(date);// setDate function is written in Class file
            resultList.add(ob);
        }
        catch (Exception e) {
            Log.e(MY_DEBUG_TAG, "Error " + e.toString());
        }

    }

    c.close();

    db.close();
    return resultList;
}

7
2018-03-30 05:59



Cảm ơn runor49. Tôi đã thử điều này nhưng không làm việc cho tôi - Aswini K
Chính xác thì không làm việc là gì? Không có hồ sơ nhận được dân cư? - runor49
Công việc của nó, khi tôi gỡ bỏ db.close () khỏi mã của tôi và phát sinh c.close (). Nhưng tôi nghĩ rằng db.open () và db.close () là cần thiết. Nhưng bây giờ vấn đề là, một số lỗi và báo cáo cảnh báo được hiển thị trong logcat..WARN / SQLiteCompiledSql (10839): Phát hành câu lệnh trong finalizer. Hãy chắc chắn rằng bạn gọi một cách rõ ràng close () trên con trỏ của bạn: WARN / SQLiteCompiledSql (10839): android.database.sqlite.DatabaseObjectNotClosedException: Ứng dụng không đóng con trỏ hoặc đối tượng cơ sở dữ liệu đã được mở ở đây .close () chưa bao giờ được gọi một cách rõ ràng và một số lỗi cơ sở dữ liệu khác cũng hiển thị - Aswini K
thêm db.close (); sau c.close (); - runor49
cảm ơn runor49 vì sự giúp đỡ của bạn. Trợ giúp của bạn thực sự đáng cảm ơn và +1 cho sự giúp đỡ của bạn. Bạn có thể vui lòng giúp tôi trong vấn đề này tại liên kết đã cho .. stackoverflow.com/questions/7848915/…


Tôi đã có một vấn đề tương tự với lấy giá trị từ db bằng cách sử dụng con trỏ và hiển thị trên màn hình .. Giải pháp dưới đây làm việc cho tôi ..

            Cursor cur = db.getAllValues();
            int index = c.getColumnIndex("date");
    cur.moveToFirst();

    while (cur.isAfterLast() == false) {
        System.out.println(cur.getString(index)); // For debug purposes
        String date = cur.getString(index);
        try {
            ob = new objectname();
            ob.setDate(date);
            resultList.add(ob);
        } catch (Exception e) {
            Log.e(MY_DEBUG_TAG, "Error " + e.toString());
        }
        cur.moveToNext();
    }
    cur.close();

2
2018-03-30 06:54



Cảm ơn venus. Tôi đã thử điều này nhưng không hoạt động. - Aswini K


Có lẽ truy vấn của bạn đang vẽ một ô trống và moveToFirst đang trở về sai.

Điều gì về việc ghi lại giá trị của c.getCount() trước khi bạn if tuyên bố?


1
2018-03-30 05:57



Số hàng được hiển thị chính xác trong khi ghi nhật ký c.getCount (). - Aswini K
Sau đó, mã của bạn sẽ hoạt động. Đây có phải là mã thực sự bạn đang sử dụng không? - Matthew Willis
Cảm ơn Matthew Willis.My mã thực tế trông giống như mã tôi đăng ở đây. - Aswini K
Có lẽ sự khác biệt giữa mã thực tế và mã bạn đăng là nơi xảy ra lỗi. - Matthew Willis