【发布时间】:2014-01-21 06:10:02
【问题描述】:
我正在创建一个使用现有 sqlite 数据库的 Dictionary 应用程序。我已将我的数据库放在 assets 文件夹中,并在第一次启动应用程序时使用以下代码复制数据库。 (我从this帖子中借用了这个想法)
DatabaseHelper.java
public class DatabaseHelper {
private static String DB_PATH = "";
private static String DB_NAME = "abc.sqlite";
private SQLiteDatabase myDatabase;
private Context myContext;
public DatabaseHelper(Context context) {
myContext = context;
if (android.os.Build.VERSION.SDK_INT >= 17)
DB_PATH = context.getApplicationInfo().dataDir + "/databases/";
else
DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
Log.d("path", DB_PATH);
}
public void copyDatabase() {
InputStream myInput;
OutputStream outStream;
try {
myInput = myContext.getAssets().open(DB_NAME);
String file = DB_PATH + DB_NAME;
outStream = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int length = 0;
while ((length = myInput.read(buffer)) >= 0) {
outStream.write(buffer, 0, length);
}
outStream.flush();
myInput.close();
outStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
然后我从我的MainActivity 中调用上述copyDatabase() 方法。这是代码。
public class MainActivity extends Activity {
DatabaseHelper myDbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout);
myDbHelper = new DatabaseHelper(getApplicationContext());
myDbHelper.copyDatabase();
}
}
但问题是Android不会复制数据库。我使用了 Log 工具,我发现 while 循环永远不会运行。 这段代码有什么问题。 谢谢。
【问题讨论】:
-
只需将您的while循环行更改为
while ((length = myInput.read(buffer)) > 0) {只需将其与>而不是>=进行比较。 -
你继续使用 GrlsHu,您还需要在转到 FileOutputStream 之前创建文件
-
在 SO 和其他地方有十几个这样的例子。应该用谷歌搜索。
-
@Rajat 记住从其他来源获取代码时的小错误。查看我的答案。