2011-11-07 28 views
5

Tôi có một nhà cung cấp nội dung truy cập cơ sở dữ liệu của tôi mà là tốt nếu bạn cần để đối phó với bộ hồ sơ nhưng tôi cần một phương pháp để trả lại một số nguyên thể hiện số lượng các bản ghi trong một bảngPhương thức tùy chỉnh Android trong nhà cung cấp nội dung để nhận được số lượng bản ghi trong bảng?

Phương pháp này trông giống như

này
public long getRecordCount(String TableName) { 
    SQLiteDatabase mDatabase = mOpenHelper.getReadableDatabase(); 
    String sql = "SELECT COUNT(*) FROM " + TableName; 
    SQLiteStatement statement = mDatabase.compileStatement(sql); 
    long count = statement.simpleQueryForLong(); 
    return count; 
} 

Nhưng tôi không thể tìm thấy bất kỳ cách nào để sử dụng (hoặc bất kỳ phương pháp nào khác không trả lại con trỏ cho vấn đề đó) trong nhà cung cấp nội dung, vậy đâu là nơi tốt nhất để đặt phương pháp này và gọi nó như thế nào ?

Rõ ràng tôi có thể làm tùy chọn thực sự tồi tệ của việc lựa chọn tất cả các hồ sơ với một truy vấn quản lý và sử dụng kết quả cursor.count nhưng đó là một cách cực kỳ hiệu quả để đối phó với yêu cầu cụ thể này

Cảm ơn

Trả lời

10

Bạn cũng có thể chỉ đơn giản là sử dụng "count (*)" như một dự báo trong một cuộc gọi đến các nhà cung cấp nội dung URI của bạn, như trong phương thức helper sau

public static int count(Uri uri,String selection,String[] selectionArgs) { 
    Cursor cursor = getContentResolver().query(uri,new String[] {"count(*)"}, 
     selection, selectionArgs, null); 
    if (cursor.getCount() == 0) { 
    cursor.close(); 
    return 0; 
    } else { 
    cursor.moveToFirst(); 
    int result = cursor.getInt(0); 
    cursor.close(); 
    return result; 
    } 
} 
1

Một cách bạn có thể truy cập nó là sử dụng phương thức call() trong lớp ContentResolver. Tôi không thể tìm thấy nhiều về cách thực sự sử dụng điều này trên google, nhưng tôi đoán là bạn chỉ nên có getRecordCount() trả lại một gói với kết quả của bạn trong đó. Tất nhiên điều dễ dàng hơn để làm sẽ giống như những gì được mô tả trong số SO Post này.

+0

Cảm ơn bạn, điều này mở ra một số câu hỏi khác sẽ được trả lời tốt nhất nếu có ví dụ về cách triển khai giải pháp được đề xuất của bạn. Đặc biệt cách lấy giá trị từ gói được trả về và cách đặt giá trị vào kết quả lớp gói. Nếu bạn có thể chỉ cho tôi theo hướng của một ví dụ sử dụng phương pháp này tôi thực sự sẽ đánh giá cao nó – jamesc

+0

Tôi đang gặp khó khăn khi tìm chính xác làm thế nào để sử dụng phương pháp là tốt. Xem câu trả lời đã chỉnh sửa của tôi cho một số đề xuất khác. –

+0

lol! Không phải ngày của riêng tôi sau đó :) - Tôi đoán tôi có thể sử dụng một truy vấn quản lý, thiết lập một uri mới và có kết quả của số lượng lựa chọn * trả về một con trỏ - Có vẻ như các giải pháp simples. Cảm ơn sự giúp đỡ của bạn – jamesc

Các vấn đề liên quan