#android #sqlite
Вопрос:
Я использую следующий код: https://github.com/devendrachavan/SQLiteExample
DatabaseHelperClass.java в комплекте с кодом используется:
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
Я хотел бы изменить текущий конструктор, позволяющий хранить базу данных sqlite на моей SD-карте или в другом каталоге на устройстве, доступ к которому можно получить из file explore без укоренения.
//Constructor included in DatabaseHelperClass.java
public DatabaseHelperClass (Context context){
super(context,DATABASE_NAME,null,DATABASE_VERSION);
}
Я попробовал эту вспомогательную функцию базы данных и не получил результатов:
https://titanwolf.org/Network/Articles/Article?AID=d70ad5f8-153a-48a6-951b-6be5ac3a7589
Я попытался указать жесткий путь перед ИМЕНЕМ базы данных и не получил результатов
Мой AndroidManifest.xml в настоящее время содержит:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Код будет скомпилирован, однако приложение закроется при доступе к базе данных. Я не уверен, как заставить все работать с помощью Android OS 28 Pie.
Используя следующий конструктор:
общедоступный класс базы данных (контекстный контекст) { супер(контекст, среда.getExternalStorageDirectory() Файл.разделитель ИМЯ базы ДАННЫХ, null, база данных SQLiteDatabase.OPEN_READWRITE); }
получает следующую ошибку:
Logcat(отладка):
2021-11-03 04:02:58.992 6200-6200/com.example.sqliteexample E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.sqliteexample, PID: 6200
java.lang.IllegalArgumentException: Version must be >= 1, was 0
at android.database.sqlite.SQLiteOpenHelper.<init>(SQLiteOpenHelper.java:160)
at android.database.sqlite.SQLiteOpenHelper.<init>(SQLiteOpenHelper.java:150)
at android.database.sqlite.SQLiteOpenHelper.<init>(SQLiteOpenHelper.java:101)
at android.database.sqlite.SQLiteOpenHelper.<init>(SQLiteOpenHelper.java:78)
at com.example.sqliteexample.DatabaseHelperClass.<init>(DatabaseHelperClass.java:59)
at com.example.sqliteexample.MainActivity$1.onClick(MainActivity.java:36)
at android.view.View.performClick(View.java:7357)
at android.widget.TextView.performClick(TextView.java:14210)
at android.view.View.performClickInternal(View.java:7323)
at android.view.View.access$3200(View.java:849)
at android.view.View$PerformClick.run(View.java:27895)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7266)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975)
2021-11-03 04:02:59.038 6200-6200/com.example.sqliteexample I/Process: Sending signal. PID: 6200 SIG: 9
Комментарии:
1.
have tried this database helper function and didn't get results:
Что пошло не так?2. Код будет скомпилирован, однако приложение закроется при доступе к базе данных.
3. Хотел бы я, чтобы у меня было решение. Я хотел бы изменить текущий конструктор для кода, который я использую, позволяя хранить базу данных sqlite на моей SD-карте или в другом каталоге на устройстве, доступ к которому можно получить из file explore без укоренения.
4. Ты уже говорил это раньше. Зачем повторять? И разве не более важно решить проблему аварии?
5. Logcat (отладка) показывает: 2021-11-03 04:02:58.992 6200-6200/com.пример.sqliteexample E/AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.пример.sqliteexample, PID: 6200 java.lang. Исключение IllegalArgumentException: Версия должна быть >= 1, в android.database.sqlite было 0. SQLiteOpenHelper.<init> в com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494) в com.android.internal.os.ZygoteInit.main(ZygoteInit.java:975) 2021-11-03 04:02:59.038 6200-6200/com.пример.Пример ввода-вывода sqliteexample: Отправка сигнала. PID: 6200 SIG: 9