开发者

Moving database on Android

开发者 https://www.devze.com 2023-04-05 18:00 出处:网络
I am shipping my Android application with an SQLite database (300 KB), and after what I read I need to move it in order to use it. In iOS you move the database from the app to the documents folder bec

I am shipping my Android application with an SQLite database (300 KB), and after what I read I need to move it in order to use it. In iOS you move the database from the app to the documents folder because you can't write to the app because it is signed. Is this the reason on Android as well? So back to my question. The following code does not copy the database correctly, it only copies some of it. Why so? Have I done something wrong here.

private final static String DB_NAME = "klb.sqlite";
dbPath = "/data/data/" + context.getPackageName() + "/databases/"; // setting this in constructor

(The lines above is private members, applies to both code examples below)

BufferedInputStream bis = new BufferedInp开发者_开发问答utStream(context.getAssets().open(DB_NAME));
FileOutputStream fos = new FileOutputStream(dbPath + DB_NAME);

while (bis.read() != -1) {
    fos.write(bis.read());
}

bis.close();
fos.flush();
fos.close();

However this works: (Sorry for being lazy about re-indenting)

        InputStream inputStream = context.getAssets().open("klb.sqlite");
        OutputStream outputStream = new FileOutputStream(file);

        byte[] buffer = new byte[1024];
        int length;
        while ((length = inputStream.read(buffer)) > 0) {
            outputStream.write(buffer, 0, length);
        }

        inputStream.close();
        outputStream.close();


while (bis.read() != -1) {
    fos.write(bis.read());
}

Look at that closely. Your calling read twice, but write once. You're effectively skipping every other byte.

0

精彩评论

暂无评论...
验证码 换一张
取 消