2010-12-30 25 views
6

Chúng tôi đang tạo một ứng dụng đồng bộ hóa 5000 mục nhập lịch với máy chủ. Vấn đề là sau khi thêm 1913 mục nó không và đưa ra dấu vết ngăn xếp sau đây. Vấn đề là gì?Android SQL Lite không phát triển được

 
12-30 11:48:16.989: DEBUG/dalvikvm(384): GC_EXPLICIT freed 5699 objects/345848 bytes in 579ms 
12-30 11:48:22.530: DEBUG/dalvikvm(232): GC_EXPLICIT freed 2552 objects/124160 bytes in 311ms 
12-30 11:48:24.560: ERROR/CursorWindow(232): need to grow: mSize = 1048576, size = 414, freeSpace() = 328, numRows = 1913 
12-30 11:48:24.599: ERROR/CursorWindow(232): not growing since there are already 1913 row(s), max size 1048576 
12-30 11:48:24.599: ERROR/CursorWindow(232): The row failed, so back out the new row accounting from allocRowSlot 1912 
12-30 11:48:24.620: ERROR/Cursor(232): Failed allocating fieldDir at startPos 0 row 1912 
12-30 11:48:27.340: DEBUG/Cursor(232): finish_program_and_get_row_count row 3266 
12-30 11:48:28.070: ERROR/Calendar(Vikas)(384): Uncaught exception in EasSyncServicejava.lang.NullPointerException 
12-30 11:48:28.089: ERROR/Calendar(Vikas)(384): Sync ended due to an exception. 
+0

Truy cập http://code.google.com/p/android/issues/detail?id=21435, có thể bạn bị ảnh hưởng bởi cùng một sự cố –

Trả lời

6

Lớp CursorWindow chỉ hỗ trợ đọc 1MB dữ liệu cho mỗi truy vấn:

#define MAX_WINDOW_SIZE (1024 * 1024) 

(Source)

Hãy thử một hoặc nhiều điều sau đây: hàng

  • Yêu cầu ít.
  • Yêu cầu ít cột hơn.
  • Tách truy vấn của bạn thành các truy vấn nhỏ hơn và chạy từng truy vấn một.

Một cách bạn có thể cải thiện tình huống là lưu trữ ngày đồng bộ hóa cuối cùng trên máy chủ và chỉ đồng bộ hóa các thay đổi đã xảy ra kể từ ngày đó.

SELECT * 
FROM calendar 
WHERE modified > 'some date' 
+0

ThanksBởi mặc định ứng dụng sẽ chỉ đồng bộ hóa những sự kiện không được đồng bộ hóa nhưng chúng tôi phải hỗ trợ tối thiểu 5000 sự kiện lịch. bạn có thể chia sẻ một số mã số – user558022

+0

@ user558022 Bạn có thể thêm "LIMIT 500" vào truy vấn của mình và chỉ đồng bộ hóa 500 sự kiện. Sau đó, một khi được thực hiện chạy đồng bộ một lần nữa để có được 500 tiếp theo, vv ... cho đến khi bạn đồng bộ hóa tất cả mọi thứ. –

+0

cảm ơn Mark, bây giờ những gì chúng tôi đang làm là gọi một phương thức getCalendar trả về một hàng mỗi khi nó được gọi là hình thức jni. sau mỗi cuộc gọi, chúng tôi sẽ đóng con trỏ. nhưng làm thế nào nó hết bộ nhớ. – user558022

1

Tôi gặp vấn đề tương tự, trong trường hợp của tôi là do NullPointerException bằng cách phân tích cú pháp thông tin TimeZone (tiếc là dấu vết ngăn xếp bị mất trong mã).

Có thể bạn bị ảnh hưởng bởi cùng một vấn đề.

Truy cập http://code.google.com/p/android/issues/detail?id=21435, tôi đã mở một vấn đề của google nhưng có vẻ như họ không quan tâm đến vấn đề. Vấn đề hiện tại bị từ chối.

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