2010-06-10 34 views
6

Câu hỏi của tôi là tôi nghĩ khá đơn giản nhưng tôi không nghĩ câu trả lời sẽ là ... Tôi có khá nhiều nội dung trong ứng dụng của mình để làm cho nó chạy đúng, và tôi đang nghĩ đến việc đặt tất cả nó vào một cơ sở dữ liệu, và phân phối nó trong một cơ sở dữ liệu được nhúng với ứng dụng trên thị trường. Vấn đề duy nhất là tôi không biết làm thế nào để làm điều đó. Tôi biết rằng tôi có thể trích xuất một tệp .db từ Eclipse DDMS với nội dung của cơ sở dữ liệu của tôi, và tôi giả sử tôi cần đặt nó vào thư mục tài sản của ứng dụng của mình, nhưng sau đó cách làm cho ứng dụng sử dụng nó để tạo lại ứng dụng cơ sở dữ liệu? Nếu bạn có bất kỳ liên kết nào đến một số mã hoặc trợ giúp, điều đó thật tuyệt. Cảm ơnNhúng cơ sở dữ liệu vào .apk của ứng dụng được phân phối [Android]

Trả lời

12

Vâng để đạt được những gì bạn đang yêu cầu, bạn có thể đặt các tập tin .db trong tài sản của bạn/thư mục và sao chép nó vào vị trí lần đầu tiên bạn khởi động ứng dụng của bạn .....

final String DB_DESTINATION = "/data/data/YOUR_PACKAGE_NAME/databases/MyDatabaseFile.db"; 

// Check if the database exists before copying 
boolean initialiseDatabase = (new File(DB_DESTINATION)).exists(); 
if (initialiseDatabase == false) { 

    // Open the .db file in your assets directory 
    InputStream is = getContext().getAssets().open("MyDatabaseFile.db"); 

    // Copy the database into the destination 
    OutputStream os = new FileOutputStream(DB_DESTINATION); 
    byte[] buffer = new byte[1024]; 
    int length; 
    while ((length = is.read(buffer)) > 0){ 
     os.write(buffer, 0, length); 
    } 
    os.flush(); 

    os.close(); 
    is.close(); 
} 

Trường hợp "initialiseDatabase" là một số cờ chỉ ra nếu ứng dụng đã được khởi chạy lần đầu tiên.

Mặc dù, nếu bạn đang xem lưu trữ nhiều dữ liệu, như bạn đã đề cập: Tôi khuyên bạn không nên bloating tệp APK với nó và sử dụng kết nối Internet để tải xuống bản ghi cơ sở dữ liệu (từ máy chủ lưu trữ) sau ứng dụng đã được khởi chạy. Bằng cách này, bạn có thể hiển thị thanh tiến trình cho biết người dùng tại sao họ chờ đợi một thời gian dài để bắt đầu sử dụng ứng dụng. Làm cho APK đặc biệt lớn thường ngăn người khác cài đặt nó ngay từ đầu.

+0

Vâng, trước đây tôi đã sử dụng thanh tiến trình, nhưng khi tôi tải xuống rất nhiều ảnh và phân tích cú pháp XML , phải mất khá nhiều thời gian, đặc biệt là khi bạn sử dụng mạng 3G thay vì wifi – Sephy

+0

nó sẽ không dễ dàng hơn để chỉ kiểm tra nếu cơ sở dữ liệu đã tồn tại thay vì sử dụng boolean? Làm cách nào để theo dõi boolean khi ứng dụng bị tắt? nhập trong DB? – Sephy

+0

Đó là chính xác những gì boolean đại diện, tôi để lại đó như là một bài tập thực hiện. Tôi đã cập nhật mã ví dụ về cách bạn có thể thực hiện việc này. – seanhodges

1

Bạn có thể triển khai giải pháp trung gian: Sử dụng cách tiếp cận ở trên, nhưng thay vì phân phối tệp db đặt nó trên máy chủ ở đâu đó. Theo kinh nghiệm của tôi, chỉ có 10% thời gian xử lý, phần còn lại của nó là phân tích và tuần tự hóa hình ảnh thành db

+0

Thực ra mục đích của tôi là tránh đặt nó trên máy chủ và tải xuống trực tiếp sau khi cài đặt ứng dụng ... – Sephy

+0

Tôi hiểu. Tôi đã xem xét nó cho ứng dụng của tôi nhưng sau đó tôi nhìn vào kích thước db và khác của nó + 350K. Mọi người rất nhạy cảm về điều đó, nhưng nếu bạn có kết nối tốt, nó chắc chắn sẽ nhanh hơn tải xuống từng phần với quá trình xử lý tiếp theo – Bostone

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