Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Anton6996
0 / 0 / 0
Регистрация: 25.11.2017
Сообщений: 6
1

Как вызвать БД в новом activity

12.12.2017, 14:21. Просмотров 334. Ответов 2

Нужно в новом классе вызвать БД. Нашел в интернете пример, но почему-то, при запуске приложения на телефоне, переходя в
эту самую активность, у меня выскакивает ошибка.
Ниже показан класс с написанной БД.
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
 
import android.content.Context;
 
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
 
public class DataBaseHelper extends SQLiteOpenHelper{
 
    // путь к базе данных вашего приложения
    private static String DB_PATH = "DATA/data/chernovik/databases/DataBase.db";
    private static String DB_NAME;
    private SQLiteDatabase myDataBase;
    private final Context mContext;
 
 
 
    /**
     * Конструктор
     * Принимает и сохраняет ссылку на переданный контекст для доступа к ресурсам приложения
     * @param context
     */
 
    public DataBaseHelper(Context context, String name_bd) {
 
        super(context, name_bd, null, 1);
        this.mContext = context;
        DB_NAME = name_bd;
    }
 
    /**
     * Создает пустую базу данных и перезаписывает ее нашей собственной базой
     * */
    public void createDataBase() throws IOException{
        boolean dbExist = checkDataBase();
 
        if(dbExist){
            //вызывая этот метод создаем пустую базу, позже она будет перезаписана
            this.getReadableDatabase();
 
 
            try {
                copyDataBase();
            } catch (IOException e) {
                throw new Error("Error copying database");
            }
 
        }
        else{
            //вызывая этот метод создаем пустую базу, позже она будет перезаписана
            this.getReadableDatabase();
 
 
            try {
                copyDataBase();
            } catch (IOException e) {
                throw new Error("Error copying database");
            }
        }
    }
 
 
    public void updateDataBase() throws IOException{
 
        this.getReadableDatabase();
 
 
        try {
            copyDataBase();
        } catch (IOException e) {
            throw new Error("Error copying database");
        }
 
 
    }
 
 
 
 
    /**
     * Проверяет, существует ли уже эта база, чтобы не копировать каждый раз при запуске приложения
     * @return true если существует, false если не существует
     */
    private boolean checkDataBase(){
        SQLiteDatabase checkDB = null;
 
        try{
            String myPath = DB_PATH + DB_NAME;
            checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
        }catch(SQLiteException e){
            //база еще не существует
        }
        if(checkDB != null){
            checkDB.close();
        }
        return checkDB != null ? true : 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) {
 
 
    }
}
А также код, с помощью которого я хочу вызвать свою БД в новом классе.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  DataBaseHelper myDbHelperSort;
        SQLiteDatabase db_sort;
        Cursor cur_sort;
        myDbHelperSort = new DataBaseHelper( this, "db_bd_sort");
 
        try {
            myDbHelperSort.createDataBase();
        } catch (IOException ioe) {
            throw new Error("Unable to create database");
        }
        db_sort = myDbHelperSort.getWritableDatabase();
 
     String query_sort = "SELECT url FROM images";
        cur_sort = db_sort.rawQuery(query_sort, null);
        cur_sort.moveToFirst();
 
        int long_sort = cur_sort.getCount();
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2017, 14:21
Ответы с готовыми решениями:

Как вызвать Activity не из Activity?
Приложение перехватываем входящие СМС. Есть класс унаследованный от BroadcastReceiver, который...

Вызвать из одной activity функцию другой activity
вызвать из одного activity функцию другой activity Подскажите, можно ли такое реализовать?...

Как вызвать другой activity в android ?
Как вызвать другой activity в android ??? Добавлено через 1 минуту @Override ...

Вызвать из ListView новое Activity (где задействован SimpleAdapter)
Привет Всем! Я купил себе android... и вдруг возникли мысли ...почему бы не сделать приложения.......

Как из одного Activity перенести фотку в другое Activity?
Собственно необходимо отобразить фотографию в activity2, которую загрузили в activity1 из галереи ...

2
Pablito
2825 / 2244 / 759
Регистрация: 12.05.2014
Сообщений: 7,847
Завершенные тесты: 1
12.12.2017, 15:11 2
для начала вместо всех этих строк
Java
1
throw new Error
поставить
Java
1
e.printStackTrace();
и смотреть лог ошибки
0
Anton6996
0 / 0 / 0
Регистрация: 25.11.2017
Сообщений: 6
12.12.2017, 16:45  [ТС] 3
В итоге выдаёт эту ошибку:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
12-12 16:37:38.732 19224-19224/com.example.chernovik E/AndroidRuntime: FATAL EXCEPTION: main
                                                                       Process: com.example.chernovik, PID: 19224
                                                                       java.lang.Error: Error copying database
                                                                           at com.example.chernovik.DataBaseHelper.createDataBase(DataBaseHelper.java:65)
                                                                           at com.example.chernovik.ActivityList.onCreate(ActivityList.java:53)
                                                                           at android.app.Activity.performCreate(Activity.java:6912)
                                                                           at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
                                                                           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2877)
                                                                           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2985)
                                                                           at android.app.ActivityThread.-wrap14(ActivityThread.java)
                                                                           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1635)
                                                                           at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                           at android.os.Looper.loop(Looper.java:154)
                                                                           at android.app.ActivityThread.main(ActivityThread.java:6692)
                                                                           at java.lang.reflect.Method.invoke(Native Method)
                                                                           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
                                                                           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2017, 16:45

Как в Navigation Drawer Activity засунуть Activity?
Здравствуйте! у меня такая проблема navigation drawer activity работает только с фрагментами как...

Как добавить cardview в activity с другой activity?
У меня есть активность(1), куда нужно добавить cardview. в этой же активности есть кнопка(1), при...

Приложение зависает, если свернуть и развернуть Activity или перейти на другую Activity
У меня в параллельном потоке происходит куча apply() Решение использовать apply вместо commit было...


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

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

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