database bug fix

Signed-off-by: nuclearfog <hatespirit666@gmail.com>
This commit is contained in:
nuclearfog 2021-10-25 12:30:42 +02:00
parent 0bfbd410c3
commit 1339ee0d7d
No known key found for this signature in database
GPG Key ID: AA0271FBE406DB98
10 changed files with 49 additions and 54 deletions

View File

@ -280,7 +280,8 @@ public class AppSettings extends AppCompatActivity implements OnClickListener, O
// reset twitter singleton // reset twitter singleton
TwitterEngine.resetTwitter(); TwitterEngine.resetTwitter();
// remove account from database // remove account from database
AccountDatabase.getInstance(this).removeLogin(settings.getCurrentUserId()); AccountDatabase accountDB = new AccountDatabase(this);
accountDB.removeLogin(settings.getCurrentUserId());
settings.logout(); settings.logout();
setResult(RETURN_APP_LOGOUT); setResult(RETURN_APP_LOGOUT);
finish(); finish();

View File

@ -28,7 +28,7 @@ public class AccountLoader extends AsyncTask<Account, Void, List<Account>> {
public AccountLoader(AccountFragment fragment) { public AccountLoader(AccountFragment fragment) {
super(); super();
callback = new WeakReference<>(fragment); callback = new WeakReference<>(fragment);
accountDatabase = AccountDatabase.getInstance(fragment.requireContext()); accountDatabase = new AccountDatabase(fragment.requireContext());
appDatabase = new AppDatabase(fragment.requireContext()); appDatabase = new AppDatabase(fragment.requireContext());
} }

View File

@ -36,7 +36,7 @@ public class Registration extends AsyncTask<String, Void, String> {
super(); super();
this.callback = new WeakReference<>(activity); this.callback = new WeakReference<>(activity);
// init database and storage // init database and storage
accountDB = AccountDatabase.getInstance(activity); accountDB = new AccountDatabase(activity);
settings = GlobalSettings.getInstance(activity); settings = GlobalSettings.getInstance(activity);
mTwitter = TwitterEngine.getEmptyInstance(activity); mTwitter = TwitterEngine.getEmptyInstance(activity);
} }

View File

@ -73,7 +73,7 @@ public class UserAction extends AsyncTask<UserAction.Action, User, Relation> {
super(); super();
this.callback = new WeakReference<>(callback); this.callback = new WeakReference<>(callback);
mTwitter = TwitterEngine.getInstance(callback); mTwitter = TwitterEngine.getInstance(callback);
exclDB = ExcludeDatabase.getInstance(callback); exclDB = new ExcludeDatabase(callback);
appDB = new AppDatabase(callback); appDB = new AppDatabase(callback);
this.userId = userId; this.userId = userId;
} }

View File

@ -37,7 +37,7 @@ public class UserExcludeLoader extends AsyncTask<String, Void, Void> {
public UserExcludeLoader(UserExclude callback, Mode mode) { public UserExcludeLoader(UserExclude callback, Mode mode) {
super(); super();
mTwitter = TwitterEngine.getInstance(callback); mTwitter = TwitterEngine.getInstance(callback);
excludeDatabase = ExcludeDatabase.getInstance(callback); excludeDatabase = new ExcludeDatabase(callback);
this.callback = new WeakReference<>(callback); this.callback = new WeakReference<>(callback);
this.mode = mode; this.mode = mode;
} }

View File

@ -124,8 +124,8 @@ public class TwitterEngine {
mTwitter.isInitialized = true; mTwitter.isInitialized = true;
// initialize database and settings // initialize database and settings
mTwitter.settings = GlobalSettings.getInstance(context); mTwitter.settings = GlobalSettings.getInstance(context);
mTwitter.accountDB = AccountDatabase.getInstance(context); mTwitter.accountDB = new AccountDatabase(context);
mTwitter.excludeDB = ExcludeDatabase.getInstance(context); mTwitter.excludeDB = new ExcludeDatabase(context);
// check if already logged in // check if already logged in
if (mTwitter.settings.isLoggedIn()) { if (mTwitter.settings.isLoggedIn()) {
// init login access // init login access
@ -148,7 +148,7 @@ public class TwitterEngine {
public static TwitterEngine getEmptyInstance(Context context) { public static TwitterEngine getEmptyInstance(Context context) {
// initialize storage // initialize storage
mTwitter.settings = GlobalSettings.getInstance(context); mTwitter.settings = GlobalSettings.getInstance(context);
mTwitter.accountDB = AccountDatabase.getInstance(context); mTwitter.accountDB = new AccountDatabase(context);
// init empty session // init empty session
mTwitter.isInitialized = false; mTwitter.isInitialized = false;
mTwitter.initTwitter(null); mTwitter.initTwitter(null);

View File

@ -1,5 +1,7 @@
package org.nuclearfog.twidda.database; package org.nuclearfog.twidda.database;
import static android.database.sqlite.SQLiteDatabase.CONFLICT_REPLACE;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context; import android.content.Context;
import android.database.Cursor; import android.database.Cursor;
@ -11,8 +13,6 @@ import org.nuclearfog.twidda.database.DatabaseAdapter.AccountTable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import static android.database.sqlite.SQLiteDatabase.CONFLICT_REPLACE;
/** /**
* this database stores multi user logins * this database stores multi user logins
* *
@ -41,27 +41,14 @@ public class AccountDatabase {
*/ */
private static final String SORT_BY_CREATION = AccountTable.DATE + " DESC"; private static final String SORT_BY_CREATION = AccountTable.DATE + " DESC";
/**
* singleton instance
*/
private static final AccountDatabase INSTANCE = new AccountDatabase();
private DatabaseAdapter dataHelper; private DatabaseAdapter dataHelper;
private AccountDatabase() {
}
/** /**
* get singleton instance * @param context current activity context
*
* @return instance
*/ */
public static AccountDatabase getInstance(Context context) { public AccountDatabase(Context context) {
if (INSTANCE.dataHelper == null) dataHelper = DatabaseAdapter.getInstance(context);
INSTANCE.dataHelper = DatabaseAdapter.getInstance(context.getApplicationContext());
return INSTANCE;
} }
/** /**

View File

@ -236,7 +236,7 @@ public class AppDatabase {
private DatabaseAdapter adapter; private DatabaseAdapter adapter;
/** /**
* initialize database * @param context activity context
*/ */
public AppDatabase(Context context) { public AppDatabase(Context context) {
adapter = DatabaseAdapter.getInstance(context); adapter = DatabaseAdapter.getInstance(context);

View File

@ -186,24 +186,24 @@ public class DatabaseAdapter {
/** /**
* singleton instance * singleton instance
*/ */
private static DatabaseAdapter instance; private static final DatabaseAdapter INSTANCE = new DatabaseAdapter();
/** /**
* path to the database file * path to the database file
*/ */
private final File databasePath; private File databasePath;
/** /**
* database * database
*/ */
private SQLiteDatabase db; private SQLiteDatabase db;
private boolean isInitialized = false;
private DatabaseAdapter(Context context) { /**
databasePath = context.getDatabasePath(DB_NAME); *
db = context.openOrCreateDatabase(databasePath.toString(), MODE_PRIVATE, null); */
initTables(); private DatabaseAdapter() {
updateTable();
} }
/** /**
@ -212,7 +212,6 @@ public class DatabaseAdapter {
* @return SQLite database * @return SQLite database
*/ */
public synchronized SQLiteDatabase getDatabase() { public synchronized SQLiteDatabase getDatabase() {
// TODO add Multithreading safety
if (!db.isOpen()) if (!db.isOpen())
db = SQLiteDatabase.openOrCreateDatabase(databasePath, null); db = SQLiteDatabase.openOrCreateDatabase(databasePath, null);
return db; return db;
@ -225,9 +224,9 @@ public class DatabaseAdapter {
* @return database instance * @return database instance
*/ */
public static DatabaseAdapter getInstance(@NonNull Context context) { public static DatabaseAdapter getInstance(@NonNull Context context) {
if (instance == null) if (!INSTANCE.isInitialized)
instance = new DatabaseAdapter(context.getApplicationContext()); INSTANCE.init(context.getApplicationContext());
return instance; return INSTANCE;
} }
/** /**
@ -237,7 +236,20 @@ public class DatabaseAdapter {
*/ */
public static void deleteDatabase(Context c) { public static void deleteDatabase(Context c) {
SQLiteDatabase.deleteDatabase(c.getDatabasePath(DB_NAME)); SQLiteDatabase.deleteDatabase(c.getDatabasePath(DB_NAME));
instance = null; INSTANCE.init(c.getApplicationContext());
}
/**
* initialize databases
*
* @param c application context
*/
private void init(Context c) {
databasePath = c.getDatabasePath(DB_NAME);
db = c.openOrCreateDatabase(databasePath.toString(), MODE_PRIVATE, null);
initTables();
updateTable();
isInitialized = true;
} }
/** /**
@ -288,6 +300,12 @@ public class DatabaseAdapter {
} }
} }
@Override
@NonNull
public String toString() {
return databasePath.toString() + ":" + db.getVersion();
}
/** /**
* table for user information * table for user information
*/ */

View File

@ -34,26 +34,15 @@ public class ExcludeDatabase {
private static final String[] LIST_ID_COL = {UserExcludeTable.ID}; private static final String[] LIST_ID_COL = {UserExcludeTable.ID};
private static final ExcludeDatabase INSTANCE = new ExcludeDatabase();
private DatabaseAdapter dataHelper; private DatabaseAdapter dataHelper;
private GlobalSettings settings; private GlobalSettings settings;
private ExcludeDatabase() {
}
/** /**
* get singleton instance * @param context current context
*
* @param context activity context
* @return instance of this class
*/ */
public static ExcludeDatabase getInstance(Context context) { public ExcludeDatabase(Context context) {
if (INSTANCE.dataHelper == null) { dataHelper = DatabaseAdapter.getInstance(context);
INSTANCE.dataHelper = DatabaseAdapter.getInstance(context.getApplicationContext()); settings = GlobalSettings.getInstance(context);
INSTANCE.settings = GlobalSettings.getInstance(context);
}
return INSTANCE;
} }
/** /**