2011-09-17 5 views
1

AndroidアプリケーションをSQLiteデータベース(300 KB)で出荷しています。読み込んだ後、使用するために移動する必要があります。 iOSでは、署名されているためアプリケーションに書き込むことができないため、データベースをアプリからドキュメントフォルダに移動します。これはAndroidの理由ですか?だから私の質問に戻る。次のコードは、データベースを正しくコピーせず、その一部のみをコピーします。なぜそうなのか?私はここで間違ったことをしましたか?Androidでデータベースを移動する

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

(上記の線がプライベートメンバーで、以下の両方のコード例に適用されます)

BufferedInputStream bis = new BufferedInputStream(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(); 

しかし、これは動作します(再インデントについて怠けているため申し訳ありませんが)

 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(); 
+0

ok、どこからデータベースファイルを配置し、どこに配置したいのですか? – user370305

+0

あなたがそれを読んで私の投稿に書いた – LuckyLuke

答えて

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

それをよく見てください。あなたの呼び出しはreadですが、writeは2回です。他のすべてのバイトを効果的にスキップしています。

+0

ああ!変数に格納するのを忘れてしまった。マットありがとうございました。 – LuckyLuke

関連する問題