Как андроид получает доступ к sqlite базе данных, включенной в папку активов

У меня уже есть база данных SQLite. Я вставил его assets папка моего проекта. Я прочитал документацию Android. Это сказало, что для всех баз данных в Android, путь data/data/pack_name/database_name.

Это смутило меня. Я просто поместил его в assets папка, таким образом, путь data/data/assets/database_name?

5
задан Rafa 1 September 2015 в 17:45
поделиться

3 ответа

Имя пакета - это не имя проекта, имя пакета - это пространство имен. Из ссылки Энтони.

Не забудьте изменить "YOUR_PACKAGE" на пространство имен пакета вашего приложения (т.е.: com.examplename.myapp) в строке DB_PATH.

Например, из учебника Hello World, имя проекта - HelloAndroid, но имя пакета - com.example.helloandroid

Если бы у этого приложения была база данных, она хранилась бы по адресу data/data/com.example.helloandroid/database

Чтобы посмотреть, как обстоит дело с другими приложениями, вы можете запустить свой эмулятор. В строке меню у вас есть имя вашего avd (я думаю, это означает Android Virtual Device). На моем это "avdessay:5554"

(В Linux) В командной строке введите:

adb -s emulator-5554 shell

Вы должны заменить 5554 на любой порт, который вы используете.

Если у вас есть командная строка '#', вы можете набрать:

cd data/data

Там вы увидите, что все находится в форме имени пакета.

Больше информации здесь

7
ответ дан 18 December 2019 в 14:45
поделиться

Можно установить значение expose _ php = Off в файле php.ini, если не требуется отправлять заголовок X-Powered-By.

PHP сначала компилирует все (включая, какие заголовки имеют какие значения), а затем запускает вывод, а не наоборот.

PHP также обнаруживается с собственными пасхальными яйцами, вы можете прочитать об этой теме здесь: PHP пасхальные яйца

-121--1839498-

Упомянутые выше решения будут работать на основы. Я не думаю, что они охватывают многострочные значения. Вот программа awk, которая будет анализировать свойства Java от stdin и производить переменные среды оболочки к stdout:

BEGIN {
    FS="=";
    print "# BEGIN";
    n="";
    v="";
    c=0; # Not a line continuation.
}
/^\#/ { # The line is a comment.  Breaks line continuation.
    c=0;
    next;
}
/\\$/ && (c==0) && (NF>=2) { # Name value pair with a line continuation...
    e=index($0,"=");
    n=substr($0,1,e-1);
    v=substr($0,e+1,length($0) - e - 1);    # Trim off the backslash.
    c=1;                                    # Line continuation mode.
    next;
}
/^[^\\]+\\$/ && (c==1) { # Line continuation.  Accumulate the value.
    v= "" v substr($0,1,length($0)-1);
    next;
}
((c==1) || (NF>=2)) && !/^[^\\]+\\$/ { # End of line continuation, or a single line name/value pair
    if (c==0) {  # Single line name/value pair
        e=index($0,"=");
        n=substr($0,1,e-1);
        v=substr($0,e+1,length($0) - e);
    } else { # Line continuation mode - last line of the value.
        c=0; # Turn off line continuation mode.
        v= "" v $0;
    }
    # Make sure the name is a legal shell variable name
    gsub(/[^A-Za-z0-9_]/,"_",n);
    # Remove newlines from the value.
    gsub(/[\n\r]/,"",v);
    print n "=\"" v "\"";
    n = "";
    v = "";
}
END {
    print "# END";
}

Как вы видите, многострочные значения делают вещи более сложными. Чтобы увидеть значения свойств в оболочке, просто исходите из выходных данных:

cat myproperties.properties | awk -f readproperties.awk > temp.sh
source temp.sh

Переменные будут иметь '_' вместо '.', поэтому свойство some.property будет some_property в оболочке.

При наличии файлов свойств ANT с интерполяцией свойств (например, «$ {foo.bar}») рекомендуется использовать Groovy с AntBuilder.

Вот моя вики-страница по этой теме .

-121--1412938-

При создании базы данных с помощью классов SQLiteDatabase или SQLiteOpenHelper база данных создается в data/data/package _ name/database .

Доступ к этому ресурсу можно получить с помощью

InputStream myInput = myContext.getAssets().open(your_database_here);

Другие сведения см. в разделе Использование собственной базы данных SQLite в приложениях Android

Имя _ пакета пути будет именем пакета . Имя пакета находится в первой строке файлов .java .

В качестве примера, мой класс начинается с этого вверху

package com.forloney.tracker;

Поэтому моя база данных находится в папке data/data/com.forloney.tracker/database .

Надеюсь, это имеет смысл.

5
ответ дан 18 December 2019 в 14:45
поделиться

Когда я пытаюсь открыть свою БД, я получаю сообщение «Невозможно открыть файл базы данных». Я предполагаю, что он не нашел БД, а не какую-то другую ошибку программиста. В журнале я вижу следующее, что мне нравится.

   sqllite3_open_v2("/data/data/com.isildo.HelloListView/databases/ListsDB" ...

Это настройка

private static String DB_PATH = "/data/data/com.isildo.HelloListView/databases/";    
private static String DB_NAME = "ListsDB";

В моих ресурсах проектов в Package Explorer я вижу базу данных ListsDb.

Так что, по крайней мере, я думаю, что все у меня правильно. Я использую пример на [ http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/]

В одном из сообщения здесь, кто-то предлагает предложение по настройке некоторых параметров активов. {нет ответа на публикацию там}

**To get an ASSETS folder into your APK:
  In /nbproject/project.properties, 
     change assets.dir=
to
     assets.dir=assets 
     assets.available=true
In /nbproject/build-impl.xml, there is line in the “if=assets.available” target that reads
that needs to be changed to**

Это то, что нам нужно сделать, и если да, можем ли мы получить немного лучшее направление по требуются изменения. Я не мог найти места для внесения предлагаемых изменений. Я посмотрел настройки проекта и другие вещи.

Ага, я новичок в окружающей среде, так что, возможно, я их просто не найду. Я использую Eclipse в Windows.

0
ответ дан 18 December 2019 в 14:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: