Я создаю приложение Dictionary, которое использует существующую базу данных sqlite. Я поместил свою базу данных в папку с ресурсами, и я использую следующий код для копирования базы данных, когда приложение запускается в первый раз. (Я позаимствовал идею из 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();
}
}
}
И тогда я называю выше copyDatabase()
метод формирования моего MainActivity
. Вот код.
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 не копирует базу данных. Я использовал инструмент «Журнал», и выяснил, что цикл while никогда не запускается. В чем проблема в этом коде. Спасибо.
Просто измените строку цикла while как while ((length = myInput.read (buffer))> 0) {'просто сравните его с'> 'not'> = '. – GrIsHu
Ya Продолжайте работу с GrlsHu, и вам необходимо создать файл перед Goo FileOutputStream, а также –
Есть десяток примеров этого на SO и в других местах. Должен иметь googled. – 323go