Импортировать готовую ДБ в андроид приложение
Импортировать готовую ДБ в андроид приложение
Как можно импортировать готовую БД в андроид приложение?
Re: Импортировать готовую ДБ в андроид приложение
Засунуть её в папку assest предварительно сконвертировав если требуется.
Re: Импортировать готовую ДБ в андроид приложение
Ваш файл базы должен находится в папке assets, далее:Frai писал(а):Как можно импортировать готовую БД в андроид приложение?
Код: Выделить всё
public DbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.myContext = context;
boolean dbExists = checkDatabase();
if (dbExists) {
Log.i(LOGTAG, "DbHelper.constructor: database exists");
}else {
try{
createDatabase();
}catch (IOException e) {
e.printStackTrace();
}
}
Код: Выделить всё
private boolean checkDatabase() {
boolean checkdb = false;
try {
String myPath = DATABASE_PATH + DATABASE_NAME;
File dbFile = new File(myPath);
checkdb = dbFile.exists();
} catch (SQLiteException e) {
Log.e(LOGTAG, "checkDatabase(): Database doesn't exist");
}
return checkdb;
}
Код: Выделить всё
private void createDatabase() throws IOException{
boolean dbExists = checkDatabase();
if (dbExists){
Log.i(LOGTAG, "createDatabase(): database exists");
}else {
this.getReadableDatabase();
try{
copyDatabase();
} catch (IOException e) {
e.printStackTrace();
throw new Error("Error copying database");
}
}
}
Код: Выделить всё
private void copyDatabase() throws IOException{
// Open your local db as the input stream
InputStream input = myContext.getAssets().open(DATABASE_NAME);
// Path to the just created empty db
@SuppressWarnings("unused")
String outFilename = DATABASE_PATH + DATABASE_NAME;
// Open the empty db as the output stream
OutputStream output = new FileOutputStream(
outFilename);
// transfer byte to input file to output file
byte[] buffer = new byte[1024];
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
// Close the streams
output.flush();
output.close();
input.close();
}
Re: Импортировать готовую ДБ в андроид приложение
Для чего нужна переменная myContext ?
Re: Импортировать готовую ДБ в андроид приложение
не пробовали перед тем, как задавать вопрос смотреть на код???Frai писал(а):Для чего нужна переменная myContext ?
InputStream input = myContext.getAssets().open(DATABASE_NAME); я же писал - это контекст приложения который сохраняется в переменной конструктора класса. Нужна она, чтобы получить путь к базе в устройстве.
Re: Импортировать готовую ДБ в андроид приложение
приводите код, приводившийся на форуме неоднократно, и удивляетесь вопросам. Слишком много готового.altwin писал(а):не пробовали перед тем, как задавать вопрос смотреть на код???Frai писал(а):Для чего нужна переменная myContext ?
InputStream input = myContext.getAssets().open(DATABASE_NAME); я же писал - это контекст приложения который сохраняется в переменной конструктора класса. Нужна она, чтобы получить путь к базе в устройстве.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Импортировать готовую ДБ в андроид приложение
Я не понимаю где она должна быть объявлена и что в ней должно хронится.altwin писал(а):не пробовали перед тем, как задавать вопрос смотреть на код???Frai писал(а):Для чего нужна переменная myContext ?
InputStream input = myContext.getAssets().open(DATABASE_NAME); я же писал - это контекст приложения который сохраняется в переменной конструктора класса. Нужна она, чтобы получить путь к базе в устройстве.
Re: Импортировать готовую ДБ в андроид приложение
в данном случае она объявлена в классе: public DbHelper(Context context), в конструктор класса передается переменная context. myContext - это локальная переменная класса в которой сохраняется context. Это контекст приложения, контекст - абстрактное понятие, по сути представляющее связь с системой. Т.е. в Android есть куча внутренних констант, в данном случае метод getAssets(), возвращает константное значение, адрес в котором хранится папка assets. Вызывая метод в контексте приложения - подразумевается, что вы ищите папку assets(конкретное значение) своего приложения а не абстрактную константу. Т.е. делать что -то в контексте, как бы подразумевая, пример:Frai писал(а):Я не понимаю где она должна быть объявлена и что в ней должно хронится.altwin писал(а):не пробовали перед тем, как задавать вопрос смотреть на код???Frai писал(а):Для чего нужна переменная myContext ?
InputStream input = myContext.getAssets().open(DATABASE_NAME); я же писал - это контекст приложения который сохраняется в переменной конструктора класса. Нужна она, чтобы получить путь к базе в устройстве.
Встретились друзья Вася и Петя. Петя: привет, как дела?Здесь Петя - вызвал метод - как дела? в контексте Васи. Он не называл его явно, но подразумевал. Иначе, даже учитывая что -как дела? нормальный и понятный метод(или вопрос по сути) - ответ на него не возможен, так как нет адресата, т.е. контекста.
Re: Импортировать готовую ДБ в андроид приложение
у мегя появляется такая ошибка напротив
Код: Выделить всё
catch (IOException e){
e.printStackTrace();
}
- Вложения
-
- Безымянный.png (148.65 КБ) 8793 просмотра
Re: Импортировать готовую ДБ в андроид приложение
скорее всего потому, что не реализован метод createDatabase(), который и должен бросать это исключение.Frai писал(а):у мегя появляется такая ошибка напротивКод: Выделить всё
catch (IOException e){ e.printStackTrace(); }
Re: Импортировать готовую ДБ в андроид приложение
когда-то была проблема что нельзя из assest вычитать базу размером больше 1Мб, и бросалось исключение IOException ( http://stackoverflow.com/questions/2860 ... ets-folder ), но кажется в андроид 2.3 это пофиксили.
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
-
- Сообщения: 6
- Зарегистрирован: 14 янв 2014, 01:01
Re: Импортировать готовую ДБ в андроид приложение
Есть отличный проект на гитхабе https://github.com/jgilfelt/android-sqlite-asset-helper
Re: Импортировать готовую ДБ в андроид приложение
Ну в общем БД вроде скопировалась но когда я хочу вывести содерживое одной из тоблиз в лог приложение крашиться.Вот что пишет лог:
Код: Выделить всё
01-14 12:34:04.529: E/AndroidRuntime(18854): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.pokitarmy/com.example.pokitarmy.MainActivity}: android.database.sqlite.SQLiteException: no such table: SpaceMarines: , while compiling: SELECT * FROM SpaceMarines
Re: Импортировать готовую ДБ в андроид приложение
ну и что? нету тебя таблицы с таким названием.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Импортировать готовую ДБ в андроид приложение
В том то и дело что она есть
Re: Импортировать готовую ДБ в андроид приложение
ну попробуй вывести в лог все имеющиеся таблицы. Может не туда обращение идет. Но таблицы такой у тебя нет.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198