From 869790900b8a7527d0e7561fcce2f804318379f6 Mon Sep 17 00:00:00 2001 From: Dmytro Vodnik Date: Mon, 10 Jul 2017 17:31:32 +0300 Subject: [PATCH] fix for #733,732 issue The problem is that onCreate of content resolver are calling before even Apllication onCreate, so that fields may be null which caused crashes --- .../ContributionsContentProvider.java | 13 +++++-------- .../ModificationsContentProvider.java | 14 ++++++-------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsContentProvider.java b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsContentProvider.java index 838b9c922c..9dc933358f 100644 --- a/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsContentProvider.java +++ b/app/src/main/java/fr/free/nrw/commons/contributions/ContributionsContentProvider.java @@ -10,7 +10,6 @@ import android.text.TextUtils; import fr.free.nrw.commons.CommonsApplication; -import fr.free.nrw.commons.data.DBOpenHelper; import timber.log.Timber; public class ContributionsContentProvider extends ContentProvider{ @@ -33,10 +32,8 @@ public static Uri uriForId(int id) { return Uri.parse(BASE_URI.toString() + "/" + id); } - private DBOpenHelper dbOpenHelper; @Override public boolean onCreate() { - dbOpenHelper = CommonsApplication.getInstance().getDBOpenHelper(); return false; } @@ -47,7 +44,7 @@ public Cursor query(Uri uri, String[] projection, String selection, String[] sel int uriType = uriMatcher.match(uri); - SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); + SQLiteDatabase db = CommonsApplication.getInstance().getDBOpenHelper().getReadableDatabase(); Cursor cursor; switch(uriType) { @@ -81,7 +78,7 @@ public String getType(Uri uri) { @Override public Uri insert(Uri uri, ContentValues contentValues) { int uriType = uriMatcher.match(uri); - SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase(); + SQLiteDatabase sqlDB = CommonsApplication.getInstance().getDBOpenHelper().getWritableDatabase(); long id = 0; switch (uriType) { case CONTRIBUTIONS: @@ -99,7 +96,7 @@ public int delete(Uri uri, String s, String[] strings) { int rows = 0; int uriType = uriMatcher.match(uri); - SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); + SQLiteDatabase db = CommonsApplication.getInstance().getDBOpenHelper().getReadableDatabase(); switch(uriType) { case CONTRIBUTIONS_ID: @@ -120,7 +117,7 @@ public int delete(Uri uri, String s, String[] strings) { public int bulkInsert(Uri uri, ContentValues[] values) { Timber.d("Hello, bulk insert! (ContributionsContentProvider)"); int uriType = uriMatcher.match(uri); - SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase(); + SQLiteDatabase sqlDB = CommonsApplication.getInstance().getDBOpenHelper().getWritableDatabase(); sqlDB.beginTransaction(); switch (uriType) { case CONTRIBUTIONS: @@ -148,7 +145,7 @@ public int update(Uri uri, ContentValues contentValues, String selection, String In here, the only concat created argument is for id. It is cast to an int, and will error out otherwise. */ int uriType = uriMatcher.match(uri); - SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase(); + SQLiteDatabase sqlDB = CommonsApplication.getInstance().getDBOpenHelper().getWritableDatabase(); int rowsUpdated = 0; switch (uriType) { case CONTRIBUTIONS: diff --git a/app/src/main/java/fr/free/nrw/commons/modifications/ModificationsContentProvider.java b/app/src/main/java/fr/free/nrw/commons/modifications/ModificationsContentProvider.java index 097651aafb..9c94218643 100644 --- a/app/src/main/java/fr/free/nrw/commons/modifications/ModificationsContentProvider.java +++ b/app/src/main/java/fr/free/nrw/commons/modifications/ModificationsContentProvider.java @@ -10,7 +10,6 @@ import android.text.TextUtils; import fr.free.nrw.commons.CommonsApplication; -import fr.free.nrw.commons.data.DBOpenHelper; import timber.log.Timber; public class ModificationsContentProvider extends ContentProvider{ @@ -33,10 +32,9 @@ public static Uri uriForId(int id) { return Uri.parse(BASE_URI.toString() + "/" + id); } - private DBOpenHelper dbOpenHelper; + @Override public boolean onCreate() { - dbOpenHelper = CommonsApplication.getInstance().getDBOpenHelper(); return false; } @@ -54,7 +52,7 @@ public Cursor query(Uri uri, String[] projection, String selection, String[] sel throw new IllegalArgumentException("Unknown URI" + uri); } - SQLiteDatabase db = dbOpenHelper.getReadableDatabase(); + SQLiteDatabase db = CommonsApplication.getInstance().getDBOpenHelper().getReadableDatabase(); Cursor cursor = queryBuilder.query(db, projection, selection, selectionArgs, null, null, sortOrder); cursor.setNotificationUri(getContext().getContentResolver(), uri); @@ -70,7 +68,7 @@ public String getType(Uri uri) { @Override public Uri insert(Uri uri, ContentValues contentValues) { int uriType = uriMatcher.match(uri); - SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase(); + SQLiteDatabase sqlDB = CommonsApplication.getInstance().getDBOpenHelper().getWritableDatabase(); long id = 0; switch (uriType) { case MODIFICATIONS: @@ -86,7 +84,7 @@ public Uri insert(Uri uri, ContentValues contentValues) { @Override public int delete(Uri uri, String s, String[] strings) { int uriType = uriMatcher.match(uri); - SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase(); + SQLiteDatabase sqlDB = CommonsApplication.getInstance().getDBOpenHelper().getWritableDatabase(); switch (uriType) { case MODIFICATIONS_ID: String id = uri.getLastPathSegment(); @@ -104,7 +102,7 @@ public int delete(Uri uri, String s, String[] strings) { public int bulkInsert(Uri uri, ContentValues[] values) { Timber.d("Hello, bulk insert! (ModificationsContentProvider)"); int uriType = uriMatcher.match(uri); - SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase(); + SQLiteDatabase sqlDB = CommonsApplication.getInstance().getDBOpenHelper().getWritableDatabase(); sqlDB.beginTransaction(); switch (uriType) { case MODIFICATIONS: @@ -132,7 +130,7 @@ public int update(Uri uri, ContentValues contentValues, String selection, String In here, the only concat created argument is for id. It is cast to an int, and will error out otherwise. */ int uriType = uriMatcher.match(uri); - SQLiteDatabase sqlDB = dbOpenHelper.getWritableDatabase(); + SQLiteDatabase sqlDB = CommonsApplication.getInstance().getDBOpenHelper().getWritableDatabase(); int rowsUpdated = 0; switch (uriType) { case MODIFICATIONS: