use of android.database.sqlite.SQLiteDiskIOException in project android_frameworks_base by ResurrectionRemix.
the class DatabaseErrorHandlerTest method testDatabaseIsCorrupt.
public void testDatabaseIsCorrupt() throws IOException {
mDatabase.execSQL("create table t (i int);");
// write junk into the database file
BufferedWriter writer = new BufferedWriter(new FileWriter(mDatabaseFile.getPath()));
writer.write("blah");
writer.close();
assertTrue(mDatabaseFile.exists());
// should trigger call to MyDatabaseCorruptionHandler.onCorruption
try {
mDatabase.execSQL("select * from t;");
fail("expected exception");
} catch (SQLiteDiskIOException e) {
// expected
if (mDatabaseFile.exists()) {
mDatabaseFile.delete();
}
} catch (SQLiteException e) {
}
// database file should be gone
assertFalse(mDatabaseFile.exists());
// after corruption handler is called, the database file should be free of
// database corruption
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(mDatabaseFile.getPath(), null, new MyDatabaseCorruptionHandler());
assertTrue(db.isDatabaseIntegrityOk());
}
use of android.database.sqlite.SQLiteDiskIOException in project android_frameworks_base by ResurrectionRemix.
the class MtpDocumentsProvider method onCreate.
@Override
public boolean onCreate() {
sSingleton = this;
mContext = getContext();
mResources = getContext().getResources();
mMtpManager = new MtpManager(getContext());
mResolver = getContext().getContentResolver();
mDeviceToolkits = new HashMap<Integer, DeviceToolkit>();
mDatabase = new MtpDatabase(getContext(), MtpDatabaseConstants.FLAG_DATABASE_IN_FILE);
mRootScanner = new RootScanner(mResolver, mMtpManager, mDatabase);
mAppFuse = new AppFuse(TAG, new AppFuseCallback());
mIntentSender = new ServiceIntentSender(getContext());
// after booting.
try {
final int bootCount = Settings.Global.getInt(mResolver, Settings.Global.BOOT_COUNT, -1);
final int lastBootCount = mDatabase.getLastBootCount();
if (bootCount != -1 && bootCount != lastBootCount) {
mDatabase.setLastBootCount(bootCount);
final List<UriPermission> permissions = mResolver.getOutgoingPersistedUriPermissions();
final Uri[] uris = new Uri[permissions.size()];
for (int i = 0; i < permissions.size(); i++) {
uris[i] = permissions.get(i).getUri();
}
mDatabase.cleanDatabase(uris);
}
} catch (SQLiteDiskIOException error) {
// It can happen due to disk shortage.
Log.e(TAG, "Failed to clean database.", error);
return false;
}
// TODO: Mount AppFuse on demands.
try {
mAppFuse.mount(getContext().getSystemService(StorageManager.class));
} catch (IOException error) {
Log.e(TAG, "Failed to start app fuse.", error);
return false;
}
resume();
return true;
}
Aggregations