I am trying to load data from the database with the LoaderCallBacks. But the onLoadFinished function from the loadercallbacks will not be called. So as you can see in the log there is a rowcount of 1 that is returned but the list shows no entry also the onLoadFinished is not called as you can see.
SerieFragment
public class SerieFragment extends SherlockListFragment implements
LoaderCallbacks {
private SimpleCursorAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] from = new String[] { DBContract.Episodes.NAME };
int[] to = new int[] { R.id.name };
Log.i("LoaderManager", "Starting...");
getLoaderManager().initLoader(0, null, this);
adapter = new SimpleCursorAdapter(getActivity(),
R.layout.serie_list_item, null, from, to, 0);
this.setListAdapter(adapter);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
}
@Override
public Loader onCreateLoader(int id, Bundle args) {
Log.i("LoaderManager", "Creating loader...");
String[] projection = { DBContract.Episodes._ID,
DBContract.Episodes.NAME };
CursorLoader cursorLoader = new CursorLoader(this.getActivity(),
Uri.parse(SerieProvider.CONTENT_URI + "/episodes"), projection,
null, null, null);
return cursorLoader;
}
@Override
public void onLoadFinished(Loader loader, Cursor cursor) {
Log.i("LoaderManager",
"Finished load entry... - Cursor: " + cursor.getCount());
adapter.swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader loader) {
Log.i("LoaderManager", "Resetting loader...");
adapter.swapCursor(null);
}
Contentprovider
public class SerieProvider extends ContentProvider {
private static DatabaseHelper database;
private static final String PROVIDER = "com.drizzlyday.apps.episotron.providers";
private static final String BASE_PATH = "serieprovider";
public static final Uri CONTENT_URI = Uri.parse("content://" + PROVIDER
+ "/" + BASE_PATH);
public static final int SERIES = 1;
public static final int EPISODES = 2;
private static final UriMatcher uriMatcher;
static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(PROVIDER, BASE_PATH, SERIES);
uriMatcher.addURI(PROVIDER, BASE_PATH + "/episodes", EPISODES);
}
@Override
public boolean onCreate() {
database = new DatabaseHelper(getContext());
return false;
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
return 0;
}
@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
return null;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
return null;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
Log.d("Provider", uri.toString());
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
int uriType = uriMatcher.match(uri);
switch (uriType) {
case SERIES:
Log.d("Provider", "Series");
queryBuilder.setTables(DBContract.Series.TABLE_NAME);
break;
case EPISODES:
Log.d("Provider", "Episodes");
queryBuilder.setTables(DBContract.Episodes.TABLE_NAME);
break;
default:
throw new IllegalArgumentException("Unknown URI: " + uri);
}
SQLiteDatabase db = database.getReadableDatabase();
SQLiteCursor cursor = (SQLiteCursor) queryBuilder.query(db, projection,
selection, selectionArgs, null, null, sortOrder);
cursor.setNotificationUri(getContext().getContentResolver(), uri);
Log.d("Provider", "Cursor: " + cursor.toString()
+ " - Columncount: " + cursor.getColumnCount()
+ " - Rowcount: " + cursor.getCount());
return cursor;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO Auto-generated method stub
return 0;
}
05-05 23:34:30.855: I/ActivityThread(31903): Pub com.drizzlyday.apps.episotron.providers: com.drizzlyday.apps.episotron.providers.SerieProvider
05-05 23:34:31.035: D/Serie(31903): New Serie fragment
05-05 23:34:31.040: I/LoaderManager(31903): Starting...
05-05 23:34:31.040: I/LoaderManager(31903): Creating loader...
05-05 23:34:31.055: D/AbsListView(31903): Get MotionRecognitionManager
05-05 23:34:31.060: D/AbsListView(31903): Get MotionRecognitionManager
05-05 23:34:31.080: D/dalvikvm(31903): GC_CONCURRENT freed 174K, 8% free 12340K/13383K, paused 2ms+2ms, total 16ms
05-05 23:34:31.090: D/Provider(31903): content://com.drizzlyday.apps.episotron.providers/serieprovider/episodes
05-05 23:34:31.090: D/Provider(31903): Episodes
05-05 23:34:31.100: V/SlidingMenu(31903): setting padding!
05-05 23:34:31.160: D/libEGL(31903): loaded /system/lib/egl/libEGL_mali.so
05-05 23:34:31.175: D/libEGL(31903): loaded /system/lib/egl/libGLESv1_CM_mali.so
05-05 23:34:31.175: D/libEGL(31903): loaded /system/lib/egl/libGLESv2_mali.so
05-05 23:34:31.180: D/(31903): Device driver API match
05-05 23:34:31.180: D/(31903): Device driver API version: 10
05-05 23:34:31.180: D/(31903): User space API version: 10
05-05 23:34:31.180: D/(31903): mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Tue Oct 16 15:37:13 KST 2012
05-05 23:34:31.210: D/OpenGLRenderer(31903): Enabling debug mode 0
05-05 23:34:31.215: V/CustomViewBehind(31903): behind INVISIBLE
05-05 23:34:31.260: D/Provider(31903): Cursor: android.database.sqlite.SQLiteCursor@41b0df88 - Columncount: 2 - Rowcount: 1
Answer
I found the problem. Had to add following line to refresh the drawable state of the list:
this.getListView().refreshDrawableState();
No comments:
Post a Comment