2017-06-13 71 views
1

我需要綁定一個靜態數據庫與我的Android應用程序,必須在每次安裝/更新應用程序時進行更換。我不希望它在第一次活動的每一次開始時都被替換。將數據庫放置在資產中似乎不可行。有什麼辦法可以使用AndroidStudio來做到這一點?捆綁SQLite數據庫與Android應用程序

回答

1

您可以用位編碼的做到這一點:

import java.io.*; 
import android.content.Context; 
import android.content.res.AssetManager; 

... 

String dbName = /* db name */ 
Context context = /* read android context from somewhere */ 
File dbFile = context.getDatabasePath(dbName); 
// Test if DB file has been previously deployed. 
if(!dbFile.exists()) { 
    // Deploy the DB file. 
    AssetManager assets = context.getAssets(); 
    // Open an input stream on the source db file in assets. 
    // (Production code will need try/catch/finally around this block) 
    InputStream in = assets.open("dbname.sqlite"); 
    // Open an output stream on the target location. 
    OutputStream out = new FileOutputStream(dbFile); 
    // Copy the contents. (In actual code you would want to 
    // use a buffer). 
    int byte; 
    while((byte = in.read()) != -1) { 
     out.write(byte); 
    } 
    in.close(); 
    out.close(); 
} 
0

放置在資產數據庫似乎並不可行當然

它。 Use SQLiteAssetHelper

+0

自述文件建議在build.gardle中添加一行,有兩個build.gardle文件,一個用於項目,另一個用於模塊。哪一個應該更新。據我猜測,它應該是項目之一。這是對的嗎? –

+0

@VipulKumar:「哪一個應該更新」 - 運行時依賴關係,比如'SQLiteAssetHelper'庫,進入模塊的'build.gradle'文件。 Gradle插件進入項目的'build.gradle'文件。 – CommonsWare

相關問題