List of usage examples for android.database.sqlite SQLiteFullException getCause
public synchronized Throwable getCause()
From source file:com.numenta.core.service.DataSyncService.java
/** * This method is execute periodically and update {@link com.numenta.core.data.CoreDatabase} * with new data from the// w w w .j a va 2s . c o m * server. */ protected void synchronizeWithServer() throws IOException { Log.i(TAG, "synchronizeWithServer"); if (_synchronizingWithServer) { return; } if (!NetUtils.isConnected()) { // Not connected, skip until we connect return; } final CoreDatabase database = HTMApplication.getDatabase(); if (database == null) { return; } synchronized (this) { if (_synchronizingWithServer) { return; } _synchronizingWithServer = true; } String result = null; try { // Guard against blocking the UI Thread if (Looper.myLooper() == Looper.getMainLooper()) { throw new IllegalStateException("You should not access the database from the UI thread"); } fireRefreshStateEvent(_synchronizingWithServer); final Context context = _service.getApplicationContext(); final long now = System.currentTimeMillis(); // Check if enough time has passed since we checked for new data SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); final long lastConnectedTime = prefs.getLong(PREF_LAST_CONNECTED_TIME, 0); if (now - lastConnectedTime < DataUtils.METRIC_DATA_INTERVAL) { return; } // Calculate hours since last update. This information will be // passed to the user together with error message final CharSequence hoursSinceData = DateUtils.getRelativeTimeSpanString(database.getLastTimestamp(), now, DateUtils.MINUTE_IN_MILLIS); Future<?> pendingIO = null; try { // Try to connect to server if (_htmClient == null) { _htmClient = _service.connectToServer(); } if (_htmClient == null) { throw new IOException("Unable to connect to server"); } // Update last connected time SharedPreferences.Editor editor = prefs.edit(); editor.putLong(PREF_LAST_CONNECTED_TIME, now); editor.apply(); // Start by downloading all the metrics available from backend // in a background IO thread pendingIO = _service.getIOThreadPool().submit(new Callable<Void>() { @Override public Void call() throws Exception { try { // First load metrics loadAllMetrics(); // Load all annotations after metrics loadAllAnnotations(); // Load all data after annotations loadAllData(); // Synchronize notifications after data synchronizeNotifications(); // Synchronize application data last HTMApplication.getInstance().loadApplicationData(_htmClient); } catch (android.database.sqlite.SQLiteFullException e) { // Try to delete old records to make room if possible Log.e(TAG, "Failed to save data into database", e); database.deleteOldRecords(); } return null; } }); // Wait for metric data to finish pendingIO.get(); } catch (InterruptedException e) { // Cancel pending tasks if (!pendingIO.isDone()) { pendingIO.cancel(true); } Log.w(TAG, "Interrupted while loading data"); } catch (ExecutionException e) { // Cancel pending tasks if (!pendingIO.isDone()) { pendingIO.cancel(true); } Throwable original = e.getCause(); if (original instanceof AuthenticationException) { _service.fireAuthenticationFailedEvent(); } else if (original instanceof ObjectNotFoundException) { Log.e(TAG, "Error loading data", e); result = context.getString(R.string.refresh_update_error, hoursSinceData); } else if (original instanceof IOException) { Log.e(TAG, "Unable to connect", e); result = context.getString(R.string.refresh_server_unreachable, hoursSinceData); } else { Log.e(TAG, "Error loading data", e); result = context.getString(R.string.refresh_update_error, hoursSinceData); } } catch (AuthenticationException e) { _service.fireAuthenticationFailedEvent(); } catch (HTMException e) { Log.e(TAG, "Error loading data", e); result = context.getString(R.string.refresh_update_error, hoursSinceData); } catch (IOException e) { Log.e(TAG, "Unable to connect", e); result = context.getString(R.string.refresh_server_unreachable, hoursSinceData); } } finally { _synchronizingWithServer = false; fireRefreshStateEvent(_synchronizingWithServer, result); } }