mercredi 30 mars 2016

android app todo list

I'm new in android coding I'm trying to do a todo app .. but i have an error .. I'm using android studio NoteContentProvider

public class NoteContentProvider extends ContentProvider {

// database
private NoteDataBaseHelper database;

// used for the UriMacher
private static final int TODOS = 10;
private static final int TODO_ID = 20;

private static final String AUTHORITY = "com.example.dp_7_kholood.reminder.contentprovider";

private static final String BASE_PATH = "todos";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY
        + "/" + BASE_PATH);

public static final String CONTENT_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE
        + "/todos";
public static final String CONTENT_ITEM_TYPE = ContentResolver.CURSOR_ITEM_BASE_TYPE
        + "/todo";

private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);
static {
    sURIMatcher.addURI(AUTHORITY, BASE_PATH, TODOS);
    sURIMatcher.addURI(AUTHORITY, BASE_PATH + "/#", TODO_ID);
}

@Override
public boolean onCreate() {
    database = new NoteDataBaseHelper(getContext());
    return false;
}

@Override
public Cursor query(Uri uri, String[] projection, String selection,
                    String[] selectionArgs, String sortOrder) {

    // Uisng SQLiteQueryBuilder instead of query() method
    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();

    // check if the caller has requested a column which does not exists
    checkColumns(projection);

    // Set the table
    queryBuilder.setTables(NoteTable.TABLE_TODO);

    int uriType = sURIMatcher.match(uri);
    switch (uriType) {
        case TODOS:
            break;
        case TODO_ID:
            // adding the ID to the original query
            queryBuilder.appendWhere(NoteTable.COLUMN_ID + "="
                    + uri.getLastPathSegment());
            break;
        default:
            throw new IllegalArgumentException("Unknown URI: " + uri);
    }

    SQLiteDatabase db = database.getWritableDatabase();
    Cursor cursor = queryBuilder.query(db, projection, selection,
            selectionArgs, null, null, sortOrder);
    // make sure that potential listeners are getting notified
    cursor.setNotificationUri(getContext().getContentResolver(), uri);

    return cursor;
}

@Override
public String getType(Uri uri) {
    return null;
}

@Override
public Uri insert(Uri uri, ContentValues values) {
    int uriType = sURIMatcher.match(uri);
    SQLiteDatabase sqlDB = database.getWritableDatabase();
    long id = 0;
    switch (uriType) {
        case TODOS:
            id = sqlDB.insert(NoteTable.TABLE_TODO, null, values);
            break;
        default:
            throw new IllegalArgumentException("Unknown URI: " + uri);
    }
    getContext().getContentResolver().notifyChange(uri, null);
    return Uri.parse(BASE_PATH + "/" + id);
}

@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
    int uriType = sURIMatcher.match(uri);
    SQLiteDatabase sqlDB = database.getWritableDatabase();
    int rowsDeleted = 0;
    switch (uriType) {
        case TODOS:
            rowsDeleted = sqlDB.delete(NoteTable.TABLE_TODO, selection,
                    selectionArgs);
            break;
        case TODO_ID:
            String id = uri.getLastPathSegment();
            if (TextUtils.isEmpty(selection)) {
                rowsDeleted = sqlDB.delete(NoteTable.TABLE_TODO,
                        NoteTable.COLUMN_ID + "=" + id,
                        null);
            } else {
                rowsDeleted = sqlDB.delete(NoteTable.TABLE_TODO,
                        NoteTable.COLUMN_ID + "=" + id
                                + " and " + selection,
                        selectionArgs);
            }
            break;
        default:
            throw new IllegalArgumentException("Unknown URI: " + uri);
    }
    getContext().getContentResolver().notifyChange(uri, null);
    return rowsDeleted;
}

@Override
public int update(Uri uri, ContentValues values, String selection,
                  String[] selectionArgs) {

    int uriType = sURIMatcher.match(uri);
    SQLiteDatabase sqlDB = database.getWritableDatabase();
    int rowsUpdated = 0;
    switch (uriType) {
        case TODOS:
            rowsUpdated = sqlDB.update(NoteTable.TABLE_TODO,
                    values,
                    selection,
                    selectionArgs);
            break;
        case TODO_ID:
            String id = uri.getLastPathSegment();
            if (TextUtils.isEmpty(selection)) {
                rowsUpdated = sqlDB.update(NoteTable.TABLE_TODO,
                        values,
                        NoteTable.COLUMN_ID + "=" + id,
                        null);
            } else {
                rowsUpdated = sqlDB.update(NoteTable.TABLE_TODO,
                        values,
                        NoteTable.COLUMN_ID + "=" + id
                                + " and "
                                + selection,
                        selectionArgs);
            }
            break;
        default:
            throw new IllegalArgumentException("Unknown URI: " + uri);
    }
    getContext().getContentResolver().notifyChange(uri, null);
    return rowsUpdated;
}

private void checkColumns(String[] projection) {
    String[] available = { NoteTable.COLUMN_ITEMS,
            NoteTable.COLUMN_ID };
    if (projection != null) {
        HashSet<String> requestedColumns = new HashSet<String>(Arrays.asList(projection));
        HashSet<String> availableColumns = new HashSet<String>(Arrays.asList(available));
        // check if all columns which are requested are available
        if (!availableColumns.containsAll(requestedColumns)) {
            throw new IllegalArgumentException("Unknown columns in projection");
        }
    }
}
}

Logcat

03-30 16:46:58.544 20162-20162/com.example.dp_7_kholood.reminder I/art: Not late-enabling -Xcheck:jni (already on) 03-30 16:46:58.567 20162-20162/com.example.dp_7_kholood.reminder W/System: ClassLoader referenced unknown path: /data/app/com.example.dp_7_kholood.reminder-1/lib/x86 03-30 16:46:58.610 20162-20178/com.example.dp_7_kholood.reminder D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true 03-30 16:46:58.683 20162-20178/com.example.dp_7_kholood.reminder I/OpenGLRenderer: Initialized EGL, version 1.4 03-30 16:46:58.715 20162-20178/com.example.dp_7_kholood.reminder W/EGL_emulation: eglSurfaceAttrib not implemented 03-30 16:46:58.715 20162-20178/com.example.dp_7_kholood.reminder W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xabdbe340, error=EGL_SUCCESS 03-30 16:46:58.938 20162-20177/com.example.dp_7_kholood.reminder E/SQLiteLog: (1) no such table: todo 03-30 16:46:58.939 20162-20177/com.example.dp_7_kholood.reminder E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
                                                                                   Process: com.example.dp_7_kholood.reminder, PID: 20162
                                                                                   java.lang.RuntimeException: An error occurred while executing doInBackground()
                                                                                       at android.os.AsyncTask$3.done(AsyncTask.java:309)
                                                                                       at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
                                                                                       at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
                                                                                       at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                                       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
                                                                                       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
                                                                                       at java.lang.Thread.run(Thread.java:818)
                                                                                    Caused by: android.database.sqlite.SQLiteException: no such table: todo (code 1): , while compiling: SELECT _id, items FROM todo
                                                                                       at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
                                                                                       at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:887)
                                                                                       at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:498)
                                                                                       at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
                                                                                       at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
                                                                                       at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
                                                                                       at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
                                                                                       at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
                                                                                       at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:400)
                                                                                       at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:294)
                                                                                       at com.example.dp_7_kholood.reminder.contentprovider.NoteContentProvider.query(NoteContentProvider.java:81)
                                                                                       at android.content.ContentProvider.query(ContentProvider.java:1017)
                                                                                       at android.content.ContentProvider$Transport.query(ContentProvider.java:238)
                                                                                       at android.content.ContentResolver.query(ContentResolver.java:491)
                                                                                       at android.content.CursorLoader.loadInBackground(CursorLoader.java:64)
                                                                                       at android.content.CursorLoader.loadInBackground(CursorLoader.java:56)
                                                                                       at android.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:312)
                                                                                       at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:69)
                                                                                       at android.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:66)
                                                                                       at android.os.AsyncTask$2.call(AsyncTask.java:295)
                                                                                       at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                                       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                                                                                       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                                                                                       at java.lang.Thread.run(Thread.java:818)  03-30 16:46:59.048 20162-20178/com.example.dp_7_kholood.reminder E/Surface: getSlotFromBufferLocked: unknown buffer: 0xab752110 03-30 16:51:58.997 20162-20177/? 
                                                                                       I/Process: Sending signal. PID: 20162 SIG: 9

Aucun commentaire:

Enregistrer un commentaire