znieh99
Fortgeschrittenes Mitglied
- 12
Hallo Forum,
ich versuche den asynchronen Zugriff auf eine SQLite-DB. Dabei habe ich mindestens 2 Probleme erkannt:
1) Ich kann die DB auslesen, aber sie kommt nicht über onLoadFinished(Loader<Cursor> loader, Cursor Cursor) zurück. Daher vermute ich, dass der Zugriff gar nicht asynchron erfolgt.
2) Nach Beenden der Methode workWithDB verabschiedet sich die App mit:
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.app.heinz.testdatabase, PID: 2844
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:325)
Hier die MainActivity:
ich versuche den asynchronen Zugriff auf eine SQLite-DB. Dabei habe ich mindestens 2 Probleme erkannt:
1) Ich kann die DB auslesen, aber sie kommt nicht über onLoadFinished(Loader<Cursor> loader, Cursor Cursor) zurück. Daher vermute ich, dass der Zugriff gar nicht asynchron erfolgt.
2) Nach Beenden der Methode workWithDB verabschiedet sich die App mit:
E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.app.heinz.testdatabase, PID: 2844
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:325)
Hier die MainActivity:
Code:
public class MainActivity extends ListActivity implements LoaderManager.LoaderCallbacks<Cursor>{
private static final int LOADER_ID = 1;
private LoaderManager.LoaderCallbacks<Cursor> mCallbacks;
private SimpleCursorAdapter mAdapter;
private UniverseDB mDB;
private SQLiteDatabase dbConn;
private static final Uri DB_URI = Uri.parse("content://data/data/" +
"com.app.heinz.testdatabase/databases/universe.db");
private static final String[] DB_SUCHSPALTEN = new String[] {
StepColumns.STEP_NR,
StepColumns.DESCRIPTION,
StepColumns.TIMESTAMP
};
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] dataColumns = { "text_column" };
int[] viewIDs = { R.id.list }; //ListView Id
mAdapter = new SimpleCursorAdapter(this, R.id.list,
null, StepQuery.ALL_COLUMNS, viewIDs, 0);
setListAdapter(mAdapter);
mCallbacks = this;
LoaderManager lm = getLoaderManager();
lm.initLoader(LOADER_ID, null, mCallbacks);
mDB = UniverseDB.getInstance(this);
dbConn = mDB.getWritableDatabase();
workWithDB();
} //end onCreate ----------------------------------------
@Override public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new android.content.CursorLoader(MainActivity.this);
}
@Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
switch (loader.getId()) {
case LOADER_ID:
// The asynchronous load is complete and the data
// is now available for use. Only now can we associate
// the queried Cursor with the SimpleCursorAdapter.
mAdapter.swapCursor(cursor);
break;
}
}
@Override public void onLoaderReset(Loader<Cursor> loader) {
// For whatever reason, the Loader's data is now unavailable.
// Remove any references to the old data by replacing it with
// a null Cursor.
mAdapter.swapCursor(null);
}
private void workWithDB() {
int index[] = {1, 101, 102, 301};
int end = index.length;
for(int i = 0; i < end; i++) {
ContentValues values = new ContentValues();
values.put(StepColumns.STEP_NR, index[i]);
values.put(StepColumns.DESCRIPTION, "Step: " + index[i]);
} //end for i ------------------------------------------
Cursor stepCursor = mDB.getWritableDatabase().
query(StepQuery.TABLE_NAME,
DB_SUCHSPALTEN, null, null,
null, null, null);
while(stepCursor.moveToNext()) {
int i = stepCursor.getInt(0);
String s = stepCursor.getString(1);
int t = stepCursor.getInt(2);
int a = 1;
}
} //end workWithDB --------------------------------------
} //end C MainActivity --------------------------------------