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

Работа с готовой SQLite базой на андроид - Android

Восстановить пароль Регистрация
Другие темы раздела
Xamarin C# Xamarin Android Как конвертировать изображения Uri в Bitmap http://www.cyberforum.ru/android-dev/thread1500423.html
Я вот на пространствах интернета отыскал вот такой способ: Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri); При этом у меня вылетает ошибка, мол MainActivity не содержит определения для getContentResolver, ну и не был найден метод решения... Решения этой ошибки найти не могу. Кто может подсказать, как конвертировать изображения Uri в Bitmap?
Android Клиент-серверное приложение android Ребят, такая задача: Необходимо, чтобы пользователь1 мог отправлять сообщение со своего приложения на телефоне/компьютере на другое приложение пользователя2, но пользователь2 мог их только читать. Отправка с клиента пользователя2 на приложение пользователя1 невозможна. Все клиенты должны получать уведомления разом и без необходимости вручную подключаться к серверу. Должны приходить... http://www.cyberforum.ru/android-dev/thread1500189.html
Android Получить имя пользователя и обложку из Google+
Здравствуйте! Необходимо получить имя пользователя и его обложку (обложка просто по дизайну требуется) для этого использую google play service library, из-за чего размер приложения вырастает с 4.5 до 9 Мб (установленного)... Есть ли какой-то менее ресурсоёмкий способ? Просто увеличить приложение на 4.5 Мб только из-за имени пользователя это как-то жестоко по отношению к пользователям. Буду...
Android FindViewById
Назрел вопрос, почему в MainActivity мы пишем, например, ListView lvMain = (ListView) findViewById(R.id.lvMain); А в другом классе можно писать, например, только так: (TextView) view.findViewById(R.id.tvDescr) Почему в MainActivity мы не пишем view.findViewById? А пишем сразу findViewById? Помогите пожалуйста
Android Подгрузка данных в TabSlider http://www.cyberforum.ru/android-dev/thread1500131.html
Здравствуйте, помогите пожалуйста решить проблему. У меня есть класс HomeScreen и HomeScreenFragment. Дело вот в чем, в первом фрагменте у меня в список ListView должны подгружаться данные из БД, но делать они этого не хотят. Для этого я использую SimpleAdapter, но вот в строке: sAdapter = new SimpleAdapter(this, data, R.layout.view_list_product, from, views); вылетает ошибка, ругается на...
Android Размещение рекламы в приложении Android (Eclipse) Привет всем любителям программирования, столкнулся с проблемой, что не могу вставить рекламу в Android приложение на Eclipse. Все делаю как сказано на официальном сайте admob, возможно проблема в том, что appcompat_v7 и google_play_services не хотят работать вместе, может есть знающий человек, который мне поможет с этим разобраться? Тружусь над это рекламой день и ночь, но все никак не могу... подробнее

Показать сообщение отдельно
Alexvsalex
5 / 5 / 4
Регистрация: 22.04.2015
Сообщений: 68
17.07.2015, 17:19     Работа с готовой SQLite базой на андроид
Здравствуйте!
Пытаюсь подключить готовую sqlite базу с помощью этого кода, взятого из интернета:
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package com.alexvsalex.HelpforMath;
 
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
 
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
 
public class SQLite extends SQLiteOpenHelper {
 
    // путь к базе данных вашего приложения
    private static String DB_PATH = "/data/data/com.alexvsalex.HelpforMath/databases/";
    private static String DB_NAME = "android";
    private SQLiteDatabase myDataBase;
    private final Context mContext;
 
    /**
     * Конструктор
     * Принимает и сохраняет ссылку на переданный контекст для доступа к ресурсам приложения
     * @param context
     */
    public SQLite(Context context) {
        super(context, DB_NAME, null, 1);
        this.mContext = context;
    }
 
    /**
     * Создает пустую базу данных и перезаписывает ее нашей собственной базой
     * */
    public void createDataBase() throws IOException {
 
        if(!checkDataBase()){
            this.getReadableDatabase();
 
            try {
                copyDataBase();
            } catch (IOException e) {
                throw new Error("Error copying database");
            }
        }
    }
 
    /**
     * Проверяет, существует ли уже эта база, чтобы не копировать каждый раз при запуске приложения
     * @return true если существует, false если не существует
     */
    private boolean checkDataBase(){
        SQLiteDatabase checkDB;
 
        try{
            String myPath = DB_PATH + DB_NAME;
            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
            checkDB.close();
            return true;
        }catch(SQLiteException e){
            return false;
        }
    }
 
    /**
     * Копирует базу из папки assets заместо созданной локальной БД
     * Выполняется путем копирования потока байтов.
     * */
    private void copyDataBase() throws IOException{
        //Открываем локальную БД как входящий поток
        InputStream myInput = mContext.getAssets().open(DB_NAME);
 
        //Путь ко вновь созданной БД
        String outFileName = DB_PATH + DB_NAME;
 
        //Открываем пустую базу данных как исходящий поток
        OutputStream myOutput = new FileOutputStream(outFileName);
 
        //перемещаем байты из входящего файла в исходящий
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myInput.read(buffer))>0){
            myOutput.write(buffer, 0, length);
        }
 
        //закрываем потоки
        myOutput.flush();
        myOutput.close();
        myInput.close();
    }
 
    public void openDataBase() throws SQLException {
        //открываем БД
        String myPath = DB_PATH + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
    }
 
    @Override
    public synchronized void close() {
        if(myDataBase != null)
            myDataBase.close();
        super.close();
    }
 
    @Override
    public void onCreate(SQLiteDatabase db) {
    }
 
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
 
    public Cursor dataDirect(String s){
        openDataBase();
        return myDataBase.query(s,new String[]{"Name", "Location"},null,null,null,null,null);
    }
}
Вызываю его вот так:
Java
1
2
3
4
5
6
try {
            SQLite myDbHelper = new SQLite(this);
            myDbHelper.createDataBase();
        } catch (IOException ioe) {
            throw new Error("Unable to create database");
        }
android.db находится в /assets/
Лог:
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
07-17 14:00:37.724    1146-1146/com.alexvsalex.HelpforMath I/SqliteDatabaseCpp﹕ sqlite returned: error code = 14, msg = cannot open file at line 27701 of [8609a15dfa], db=/data/data/com.alexvsalex.HelpforMath/databases/android
07-17 14:00:37.724    1146-1146/com.alexvsalex.HelpforMath I/SqliteDatabaseCpp﹕ sqlite returned: error code = 14, msg = os_unix.c: open() at line 27701 - "" errno=2 path=/data/data/com.alexvsalex.HelpforMath/databases/android, db=/data/data/com.alexvsalex.HelpforMath/databases/android
07-17 14:00:37.724    1146-1146/com.alexvsalex.HelpforMath E/SqliteDatabaseCpp﹕ sqlite3_open_v2("/data/data/com.alexvsalex.HelpforMath/databases/android", &handle, 1, NULL) failed
07-17 14:00:37.754    1146-1146/com.alexvsalex.HelpforMath E/SQLiteDatabase﹕ Failed to open the database. closing it.
    android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file
            at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
            at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1013)
            at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:986)
            at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:962)
            at com.alexvsalex.HelpforMath.SQLite.checkDataBase(SQLite.java:58)
            at com.alexvsalex.HelpforMath.SQLite.createDataBase(SQLite.java:38)
            at com.alexvsalex.HelpforMath.DirectoryActivity.onCreate(DirectoryActivity.java:47)
            at android.app.Activity.performCreate(Activity.java:4465)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
            at android.app.ActivityThread.access$600(ActivityThread.java:123)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4424)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
            at dalvik.system.NativeStart.main(Native Method)
07-17 14:00:37.813    1146-1146/com.alexvsalex.HelpforMath D/AndroidRuntime﹕ Shutting down VM
07-17 14:00:37.813    1146-1146/com.alexvsalex.HelpforMath W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
07-17 14:00:37.864    1146-1146/com.alexvsalex.HelpforMath E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.Error: Error copying database
            at com.alexvsalex.HelpforMath.SQLite.createDataBase(SQLite.java:44)
            at com.alexvsalex.HelpforMath.DirectoryActivity.onCreate(DirectoryActivity.java:47)
            at android.app.Activity.performCreate(Activity.java:4465)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
            at android.app.ActivityThread.access$600(ActivityThread.java:123)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4424)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
            at dalvik.system.NativeStart.main(Native Method)
07-17 14:00:37.934    1146-1149/com.alexvsalex.HelpforMath D/dalvikvm﹕ GC_CONCURRENT freed 316K, 7% free 6677K/7111K, paused 4ms+3ms
07-17 14:00:37.944    1146-1156/com.alexvsalex.HelpforMath E/SQLiteDatabase﹕ close() was never explicitly called on database '/data/data/com.alexvsalex.HelpforMath/databases/android'
    android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
            at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1943)
            at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1007)
            at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:986)
            at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1051)
            at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:770)
            at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221)
            at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:157)
            at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:231)
            at com.alexvsalex.HelpforMath.SQLite.createDataBase(SQLite.java:39)
            at com.alexvsalex.HelpforMath.DirectoryActivity.onCreate(DirectoryActivity.java:47)
            at android.app.Activity.performCreate(Activity.java:4465)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
            at android.app.ActivityThread.access$600(ActivityThread.java:123)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4424)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
            at dalvik.system.NativeStart.main(Native Method)
07-17 14:00:38.174    1146-1151/com.alexvsalex.HelpforMath I/dalvikvm﹕ threadid=3: reacting to signal 3
07-17 14:00:38.184    1146-1151/com.alexvsalex.HelpforMath I/dalvikvm﹕ Wrote stack traces to '/data/anr/traces.txt'
07-17 14:00:38.444    1146-1151/com.alexvsalex.HelpforMath I/dalvikvm﹕ threadid=3: reacting to signal 3
07-17 14:00:38.454    1146-1151/com.alexvsalex.HelpforMath I/dalvikvm﹕ Wrote stack traces to '/data/anr/traces.txt'
07-17 14:02:51.833    1146-1146/com.alexvsalex.HelpforMath I/Process﹕ Sending signal. PID: 1146 SIG: 9
Пробовал выносить в отдельный поток - не помогло.
В чем причина ошибки?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru