Деятельность не отображает информацию базы данных - PullRequest
0 голосов
/ 18 апреля 2019

Я пытался реализовать базу данных sqlite в своем приложении. Добавление новых записей работает, но их отображение не работает. Я определил ContentProvider, DbHelper, Cursor Adapter, но, похоже, где-то произошла ошибка. База данных имеет три столбца (идентификатор, имя и дата)

Основная деятельность (где должны отображаться данные)

@Override
protected void onStart() {
    super.onStart();
    displayDatabaseInfo();
}

private void displayDatabaseInfo() {

    String[] projection = {
            EventEntry._ID,
            EventEntry.COLUMN_EVENT_NAME,
            EventEntry.COLUMN_EVENT_DATE,
    };

    Cursor cursor = getContentResolver().query(
            EventEntry.CONTENT_URI,
            projection,
            null,
            null,
            null);

    ListView eventsLV = findViewById(R.id.events_lv);
    EventCursorAdapter mCursorAdapter;
    mCursorAdapter = new EventCursorAdapter(this, **cursor**);
    eventsLV.setAdapter(mCursorAdapter);

CursorAdapter

public class EventCursorAdapter extends CursorAdapter {

public EventCursorAdapter(Context context, Cursor c){
    super(context, c, 0);
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    return LayoutInflater.from(context).inflate(R.layout.event_item, parent, false);
}

@Override
public void bindView(View view, Context context, Cursor cursor) {

    TextView eventNameTV = view.findViewById(R.id.event_item_name_tv);
    TextView eventDateTV = view.findViewById(R.id.event_item_date_tv);

    // Extract properties from cursor
    int eventNameIndex = cursor.getColumnIndex(EventContract.EventEntry.COLUMN_EVENT_NAME);
    int eventDateIndex = cursor.getColumnIndex(EventContract.EventEntry.COLUMN_EVENT_DATE);

    String eventNameString = cursor.getString(eventNameIndex);
    String eventDateString = cursor.getString(eventDateIndex);

    // Populate fields with extracted properties
    eventNameTV.setText(eventNameString);
    eventDateTV.setText(eventDateString);
}
  }

Класс контракта:

public final class EventContract {

private EventContract (){}

public static final String CONTENT_AUTHORITY = "com.example.deadline";
public static final String PATH_EVENTS = "events";
public static final Uri BASE_CONTENT_URI = Uri.parse("context://" + CONTENT_AUTHORITY);

public static final class EventEntry implements BaseColumns{

    public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI, PATH_EVENTS);
    public static final String CONTENT_LIST_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE + "/" + CONTENT_AUTHORITY
            + "/" + PATH_EVENTS;
    public final static String TABLE_NAME = "events";

    public final static String _ID = BaseColumns._ID;
    public final static String COLUMN_EVENT_NAME = "name";
    public final static String COLUMN_EVENT_DATE = "date";

    public final static String TABLE_SORT_BY = "name ASC";

}

И ContentProvider:

public class EventProvider extends ContentProvider {


private static final int EVENTS = 100;
private static final int EVENT_ID = 101;

private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

static {
    sUriMatcher.addURI(EventContract.CONTENT_AUTHORITY, EventContract.PATH_EVENTS, EVENTS);
    sUriMatcher.addURI(EventContract.CONTENT_AUTHORITY, EventContract.PATH_EVENTS + "/#", EVENT_ID);
}

public static final String LOG_TAG = EventProvider.class.getSimpleName();

private EventDbHelper mDbHelper = new EventDbHelper(getContext());

@Override
public boolean onCreate() {
    mDbHelper = new EventDbHelper(getContext());
    return true;
}

@Override
public Cursor query(Uri uri, String[] projection,  String selection, String[] selectionArgs, String sortOrder) {
    SQLiteDatabase database = mDbHelper.getReadableDatabase();

    // This cursor will hold the result of the query
    Cursor cursor;

    // Figure out if the URI matcher can match the URI to a specific code
    int match = sUriMatcher.match(uri);
    switch (match) {
        case EVENTS:

            cursor = database.query(EventEntry.TABLE_NAME, projection, selection, selectionArgs, null, null, sortOrder);
            break;
        case EVENT_ID:

            selection = EventEntry._ID + "=?";
            selectionArgs = new String[]{String.valueOf(ContentUris.parseId(uri))};

            cursor = database.query(EventEntry.TABLE_NAME, projection, selection, selectionArgs,
                    null, null, EventEntry.TABLE_SORT_BY);
            break;
        default:
            throw new IllegalArgumentException("Cannot query unknown URI " + uri);
    }
    cursor.setNotificationUri(getContext().getContentResolver(), uri);
    return cursor;
}

1 Ответ

0 голосов
/ 18 апреля 2019

Изменить эту строку

mCursorAdapter = new EventCursorAdapter(this, null);

на

mCursorAdapter = new EventCursorAdapter(this, cursor);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...