Включить базу данных sqlite в C ++ JNI-проект - PullRequest
0 голосов
/ 15 мая 2011

Я написал свои классы C ++, и теперь мне нужно создать библиотеку, чтобы использовать их на Android.Один класс обрабатывает базу данных, которую я подготовил заранее (она включает в себя картинки и строки).В Qt все работает нормально, поэтому код надежен.У меня есть проект Android в Eclipse, JNI, кажется, в порядке, так как во время выполнения Android не падает.Проблема в том, что база данных отсутствует.

Может кто-нибудь сказать мне, как включить его в проект таким образом, чтобы он был включен при сборке файла apk?Я видел учебник, который объясняет, как поместить его в папку активов и создает расширенный класс Java, но я не знаю, работает ли он также, когда i0m использует вызовы на уровне JNI (в C ++).

Как мне грустно раньше, у меня нет ошибок ни по компиляции, ни по времени выполнения.Приложение просто не работает ... потому что нет базы данных.Когда я оставляю определение нативных методов пустым, оно не падает, поэтому это означает, что вызов нативного метода работает нормально.

Пример, в классе C ++ у меня есть:

bool Database::open() {
if (sqlite3_open(dataBaseName, &databaseConnection) == SQLITE_OK){
    return true;
}
return false;
}

Я вызываю его собственным вызовом:

JNIEXPORT void JNICALL Java_com_tamagotchi_ItemShop_openDatabase(JNIEnv *, jobject){
    db->open();
    }

... В классе Java:

static {
    System.loadLibrary("nativeLib");
}

public native void openDatabase();

ОБНОВЛЕНИЕ: я видел пример, гдебаза данных включена в папку активов, и файл доступен с помощью getResources (). getAssets (). open ("some_file").Проблема в том, что это для стороны Java, но мне не нужен доступ к нему со стороны Java, мне нужно получить доступ к нему со стороны C ++ / JNI, используя nativelibrary.

1 Ответ

0 голосов
/ 17 мая 2011

Я решил по-другому.Я загрузил базу данных на виртуальную SD-карту и изменил путь к базе данных в своем классе C ++.Теперь работает нормально.Конечно, это не правильный способ сделать это, но я должен представить проект не позднее пятницы ... Я нашел и другое решение, но для него требуется API 2.3, который включает getResources () также в нативномсторона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...