Я хочу реализовать SQLChiper с ORMLite этой библиотекой, я хочу установить сборку gradle, следуйте за нами:
build.gradle
implementation 'com.j256.ormlite.cipher:ormlite-sqlcipher:1.2@aar'
implementation 'com.j256.ormlite:ormlite-core:5.1'
implementation 'com.j256.ormlite:ormlite-android:5.1'
implementation 'net.zetetic:android-database-sqlcipher:3.5.9@aar'
DatabaseHelper.java
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static final String DATABASE_NAME = "ut_v2_secure.db";
private static final String DATABASE_PATH = String.format("/data/data/%s/databases/", BuildConfig.APPLICATION_ID);
private static final int DATABASE_VERSION = 1;
private static final String PASSWORD = "Testing Apps";
private static DatabaseHelper sInstance;
private Dao<Profile, Integer> profileDao;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// Decrypt Database
getWritableDatabase(getPassword());
}
@Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
try {
setNullDaoObject();
TableUtils.createTableIfNotExists(connectionSource, Profile.class);
} catch (SQLException | java.sql.SQLException e) {
LogUtil.debug("Could not create new table: " + e);
}
}
private void setNullDaoObject() {
profileDao = null;
}
@Override
public void onUpgrade(net.sqlcipher.database.SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) {
Log.d("DatabaseHelper", "onUpgrade: " + oldVersion + " to " + newVersion);
try {
onCreate(db, connectionSource);
} catch (SQLException | java.sql.SQLException e) {
LogUtil.debug("Could not create new table: " + e);
}
}
@Override
protected String getPassword() {
return PASSWORD;
}
public static synchronized DatabaseHelper getInstance(Context context) {
if (sInstance == null) {
sInstance = new DatabaseHelper(context.getApplicationContext());
}
return sInstance;
}
public Dao<Profile, Integer> getProfileDao() {
if (profileDao == null) {
try {
profileDao = getDao(Profile.class);
} catch (java.sql.SQLException e) {
LogUtil.debug("Failed get profileDao: " + e.getMessage());
}
}
return profileDao;
}
@Override
public void close() {
setNullDaoObject();
super.close();
}
}
Инициализация библиотеки в App.java:
App.java
package com.devleoper.id;
import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
import net.sqlcipher.database.SQLiteDatabase;
/**
* Created by developer on 11/14/18.
*/
public class App extends Application{
@Override
public void onCreate() {
super.onCreate();
// Iniitalize SQL Chiper
SQLiteDatabase.loadLibs(this);
}
}
я хочу вызвать вспомогательную базу данных на BaseActivity к другому действию
BaseActivity.java
public abstract class BaseActivity extends AppCompatActivity {
public DatabaseHelper databaseHelper = null;
@Override
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
}
/**
* You'll need this in your class to get the helper from the manager once per class.
*/
public DatabaseHelper getDatabaseHelper() {
if (databaseHelper == null) {
databaseHelper = DatabaseHelper.getInstance(this);
}
return databaseHelper;
}
/**
* You'll need this in your class to release the helper when done.
*/
public void releaseDatabaseHelper() {
if (databaseHelper != null) {
OpenHelperManager.releaseHelper();
databaseHelper = null;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
// release DB
releaseDatabaseHelper();
}
}
MainActivity.class
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash_screen);
try {
// Get Data List Profile
List<Profile> profiles = getBaseActivity().getDatabaseHelper().getProfileDao().queryForAll();
if (profiles != null && profiles.size() > 0) {
profile = profiles.get(0);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onBackPressed() {
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
Задача
Я нашел проблему следующим образом:
- когда я получаю данные в первый раз, приложение данных может быть
в списке MainActivity.java Размер списка 100 из
Библиотека Ormlite-SQLChiper.
- Затем я нажимаю кнопку «Домой» в приложении, затем я нажимаю
кнопка последних приложений для запуска приложений, чтобы принудительно / убить приложения.
- Затем я снова открываю приложение.
- Когда я получаю список данных в MainActivity.java,
размер данных 0
- данные потеряны.
я хочу использовать для функции извлечения данных:
getBaseActivity().getDatabaseHelper().getProfileDao().queryForAll();
Есть ли решение этой проблемы? Моя кодировка неверна?
или неверный для извлечения, когда приложение принудительно закрывается из последних приложений и вновь открывается.
Спасибо.