0 / 0 / 0
Регистрация: 25.11.2017
Сообщений: 9
1

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

12.12.2017, 14:21. Показов 503. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2017, 14:21
Ответы с готовыми решениями:

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

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

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

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

2
2881 / 2293 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
12.12.2017, 15:11 2
для начала вместо всех этих строк
Java
1
throw new Error
поставить
Java
1
e.printStackTrace();
и смотреть лог ошибки
0
0 / 0 / 0
Регистрация: 25.11.2017
Сообщений: 9
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2017, 16:45

Как в Android Studio изменять объект одного Activity из другого Activity?
Есть два Activity, в одном кнопка и элемент editText. Во втором activity есть элемент TextView....

Как изменить кнопку на втором Activity с первого Activity в Android Studio?
Общая задача сделать уровни для игры, по окончанию первого уровня, появляется кнопка "выбор уровня"...

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru