Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
igrok-vip
0 / 0 / 3
Регистрация: 22.04.2013
Сообщений: 118
#1

База данных на карте памяти - Программирование Android

01.06.2013, 21:36. Просмотров 1426. Ответов 8
Метки нет (Все метки)

У меня приложение создаёт базу данных, но она создаётся в памяти телефона. Скажите как сделать чтобы она сохранялась на карте памяти?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2013, 21:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос База данных на карте памяти (Программирование Android):

Путь к карте памяти - Программирование Android
Добрый день! У меня лежит файл в памяти телефона. В приложении прописываю путь к файлу вот таким образом: File sdcard =...

Получить путь к карте памяти (SD card) - Программирование Android
Не педелитесь методом, который возвращает путь к карте памяти, если она есть? Нащел вот такой метод в интернете, но на некоторых...

Не получается получить путь к карте памяти - Программирование Android
Всем привет. У меня вот такой вопрос: storage/sdcard0 это путь к памяти телефона storage/sdcard1 это собственно карта памяти. ...

Поиск mp3 файлов на телефоне/ карте памяти - Программирование Android
вообщем проблема такая, пишу mp3 плеер под android , как мне выполнить поиск всех mp3 файлов на телефоне/sd карте и запихнуть их в...

Получить доступ к внешней карте памяти (Android 6) - Программирование Android
В предыдущей теме мне помогли разобраться с доступом к внутренней памяти. Попытался получить внешнюю память с использованием готово...

ListView, База данных и SimpleCursorAdapter - onItemClick срабатывает только после добавления данных - Программирование Android
Здравствуйте! Подскажите, плиз, решение проблемы новичку... есть БД... подключаюсь через SimpleCursorAdapter ... Нажатие на строке...

8
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.06.2013, 13:51 #2
http://stackoverflow.com/questions/7...ase-on-sd-card
0
igrok-vip
0 / 0 / 3
Регистрация: 22.04.2013
Сообщений: 118
02.06.2013, 14:39  [ТС] #3
Тоже находил этот пример. Но почему-то везде одна и та же ошибка: sqlite3_open_v2("/sdcard/mydb", &handle, 2, NULL) failed. Только вместо цифры 2 бывают другие. И после этого эклипс перестаёт вообще запускать приложение, приходится его перезапускать
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.06.2013, 14:58 #4
нужен полный лог чтобы что-то понять.

Добавлено через 1 минуту
может пермишенов не прописали?

Добавлено через 1 минуту
попробуйте заменить метод openDatabase на openOrCreateDatabase
0
igrok-vip
0 / 0 / 3
Регистрация: 22.04.2013
Сообщений: 118
02.06.2013, 15:49  [ТС] #5
В манифесте добавлено в графе <application ... android: permission="android.permission.WRITE_EXTERNAL_STORAGE"
Вот взятый из примера код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package com.example.test;
 
import java.io.File;
 
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.os.Environment;
import android.util.Log;
 
public class DatabaseHelper {
    
    private static final String TAG = "DatabaseHelper";
 
    public static final String  DATABASE_NAME = "mydb"; 
    public static final String  TRACKS_TABLE = "tracks";
    public static final String  TRACK_INFO_TABLE = "track_info";
 
    private static final String TRACKS_TABLE_CREATE = "create table "
           + TRACKS_TABLE
           + " (_id integer primary key autoincrement, " +
           "title text not null, description text null, " +
           "created_at date not null);";
 
    private static final String TRACK_INFO_TABLE_CREATE = "create table " 
           + TRACK_INFO_TABLE 
           + " (_id integer primary key autoincrement, track_id integer not null, " +
           "latitude real not null, longitude real not null, altitude real not null, " +
           "created_at date not null);";
 
    private SQLiteDatabase database;
 
    
    public DatabaseHelper() 
    {  
        try
        {
            database = SQLiteDatabase.openOrCreateDatabase(Environment.getExternalStorageDirectory()
                    + File.separator + DATABASE_NAME, null);
        }
        catch (SQLiteException ex)
        {
            Log.e(TAG, "error -- " + ex.getMessage(), ex);
            // error means tables does not exits
            createTables();
        }
        finally
        {
            database.close();
        }
        
    }
 
        private void createTables()
        {
            database.execSQL(TRACKS_TABLE_CREATE);
            database.execSQL(TRACK_INFO_TABLE_CREATE);
        }
 
        public void close()
        {
            database.close();
        }
 
        public SQLiteDatabase getReadableDatabase()
        {
            database = SQLiteDatabase.openDatabase(Environment.getExternalStorageDirectory()
                    + File.separator + DATABASE_NAME, null,
                    SQLiteDatabase.OPEN_READONLY);
            return database;
        }
 
        public SQLiteDatabase getWritableDatabase()
        {
            database = SQLiteDatabase.openDatabase(Environment.getExternalStorageDirectory()
                    + File.separator + DATABASE_NAME, null,
                    SQLiteDatabase.OPEN_READWRITE);
            return database;
        }
        
}
Изменил только DBUtil.safeCloseDataBase(database); на database.close(); т.к. Эклипс не знал что такое DBUtil.

В MainActivity только DatabaseHelper DB = new DatabaseHelper();

Вот весь лог:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
06-02 11:30:58.675: E/Database(247): sqlite3_open_v2("/sdcard/mydb", &handle, 6, NULL) failed
06-02 11:30:58.684: E/DatabaseHelper(247): error -- unable to open database file
06-02 11:30:58.684: E/DatabaseHelper(247): android.database.sqlite.SQLiteException: unable to open database file
06-02 11:30:58.684: E/DatabaseHelper(247):  at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
06-02 11:30:58.684: E/DatabaseHelper(247):  at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1584)
06-02 11:30:58.684: E/DatabaseHelper(247):  at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:638)
06-02 11:30:58.684: E/DatabaseHelper(247):  at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:659)
06-02 11:30:58.684: E/DatabaseHelper(247):  at com.example.test.DatabaseHelper.<init>(DatabaseHelper.java:37)
06-02 11:30:58.684: E/DatabaseHelper(247):  at com.example.test.MainActivity.onCreate(MainActivity.java:38)
06-02 11:30:58.684: E/DatabaseHelper(247):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
06-02 11:30:58.684: E/DatabaseHelper(247):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
06-02 11:30:58.684: E/DatabaseHelper(247):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
06-02 11:30:58.684: E/DatabaseHelper(247):  at android.app.ActivityThread.access$2100(ActivityThread.java:116)
06-02 11:30:58.684: E/DatabaseHelper(247):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
06-02 11:30:58.684: E/DatabaseHelper(247):  at android.os.Handler.dispatchMessage(Handler.java:99)
06-02 11:30:58.684: E/DatabaseHelper(247):  at android.os.Looper.loop(Looper.java:123)
06-02 11:30:58.684: E/DatabaseHelper(247):  at android.app.ActivityThread.main(ActivityThread.java:4203)
06-02 11:30:58.684: E/DatabaseHelper(247):  at java.lang.reflect.Method.invokeNative(Native Method)
06-02 11:30:58.684: E/DatabaseHelper(247):  at java.lang.reflect.Method.invoke(Method.java:521)
06-02 11:30:58.684: E/DatabaseHelper(247):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
06-02 11:30:58.684: E/DatabaseHelper(247):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
06-02 11:30:58.684: E/DatabaseHelper(247):  at dalvik.system.NativeStart.main(Native Method)
06-02 11:30:58.704: D/AndroidRuntime(247): Shutting down VM
06-02 11:30:58.704: W/dalvikvm(247): threadid=3: thread exiting with uncaught exception (group=0x4001aa28)
06-02 11:30:58.704: E/AndroidRuntime(247): Uncaught handler: thread main exiting due to uncaught exception
06-02 11:30:58.715: E/AndroidRuntime(247): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.MainActivity}: java.lang.NullPointerException
06-02 11:30:58.715: E/AndroidRuntime(247):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2401)
06-02 11:30:58.715: E/AndroidRuntime(247):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2417)
06-02 11:30:58.715: E/AndroidRuntime(247):  at android.app.ActivityThread.access$2100(ActivityThread.java:116)
06-02 11:30:58.715: E/AndroidRuntime(247):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)
06-02 11:30:58.715: E/AndroidRuntime(247):  at android.os.Handler.dispatchMessage(Handler.java:99)
06-02 11:30:58.715: E/AndroidRuntime(247):  at android.os.Looper.loop(Looper.java:123)
06-02 11:30:58.715: E/AndroidRuntime(247):  at android.app.ActivityThread.main(ActivityThread.java:4203)
06-02 11:30:58.715: E/AndroidRuntime(247):  at java.lang.reflect.Method.invokeNative(Native Method)
06-02 11:30:58.715: E/AndroidRuntime(247):  at java.lang.reflect.Method.invoke(Method.java:521)
06-02 11:30:58.715: E/AndroidRuntime(247):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
06-02 11:30:58.715: E/AndroidRuntime(247):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:549)
06-02 11:30:58.715: E/AndroidRuntime(247):  at dalvik.system.NativeStart.main(Native Method)
06-02 11:30:58.715: E/AndroidRuntime(247): Caused by: java.lang.NullPointerException
06-02 11:30:58.715: E/AndroidRuntime(247):  at com.example.test.DatabaseHelper.<init>(DatabaseHelper.java:48)
06-02 11:30:58.715: E/AndroidRuntime(247):  at com.example.test.MainActivity.onCreate(MainActivity.java:38)
06-02 11:30:58.715: E/AndroidRuntime(247):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
06-02 11:30:58.715: E/AndroidRuntime(247):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2364)
06-02 11:30:58.715: E/AndroidRuntime(247):  ... 11 more
06-02 11:30:58.734: I/dalvikvm(247): threadid=7: reacting to signal 3
06-02 11:30:58.734: E/dalvikvm(247): Unable to open stack trace file '/data/anr/traces.txt': Permission denied
Может не так permission прописываю? Потому что пока не уберу эту строчку приложение вообще не запускается, только устанавливается на avd
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.06.2013, 16:00 #6
попробуйте добавить пермишен на чтение и ".db" к имени базы.

Добавлено через 47 секунд
Цитата Сообщение от igrok-vip Посмотреть сообщение
Caused by: java.lang.NullPointerException
06-02 11:30:58.715: E/AndroidRuntime(247): *at com.example.test.DatabaseHelper.<init>(DatabaseHelper.java:48)
!!!
0
igrok-vip
0 / 0 / 3
Регистрация: 22.04.2013
Сообщений: 118
02.06.2013, 16:29  [ТС] #7
Добавление .db в DATABASE_NAME не помогло.

А что это
06-02 11:30:58.715: E/AndroidRuntime(247): *at com.example.test.DatabaseHelper.<init>(DatabaseHelper.java:4 8)
означает?
Что ошибка в файле DatabaseHelper на 48 строке?
Так там как раз та строчка которую я заменил на database.close(); т.к. еклипс не знает что такое DBUtil
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.06.2013, 16:38 #8
а пермишены на чтение добавили?


Цитата Сообщение от igrok-vip Посмотреть сообщение
А что это
06-02 11:30:58.715: E/AndroidRuntime(247): *at com.example.test.DatabaseHelper.<init>(DatabaseHelper.java:4 8)
означает?
Что ошибка в файле DatabaseHelper на 48 строке?
добавьте проверку database на null
0
igrok-vip
0 / 0 / 3
Регистрация: 22.04.2013
Сообщений: 118
02.06.2013, 17:49  [ТС] #9
Да всё дело было в разрешениях. Я ставил только одно на запись и не туда
нужно было не в <application ... android: permission="android.permission.WRITE_EXTERNAL_STORAGE"
а в
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE">
</uses-permission>

В общем сейчас база создаётся на карте памяти, только в ней только таблица android_metadata и всё
0
02.06.2013, 17:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2013, 17:49
Привет! Вот еще темы с ответами:

база данных - Программирование Android
здравствуйте, возник вопрос. приложение создает базу данных, потом пользователь удаляет программу, что происходит с базой данных?

База данных! - Программирование Android
У меня база данных забита в xml файле, как этот файл подключить к андройд приложению!

База данных - Программирование Android
Знаю, достал уже с вопросами о базе данных! Так в общем проблема в следующем: я создавал базу данных по примеру...

База данных - Программирование Android
На компьютере имеется база данных. Сервер называется localhost( 1-ый слайд). Имеется файл mysql.class.php (расположен в той же папке где и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru