Когда я пытаюсь вставить строку в базу данных с помощью контент-провайдеров, URI возвращает ноль - PullRequest
0 голосов
/ 10 июня 2019

Я пытаюсь вставить строку в таблицу под названием категории с помощью контент-провайдеров.Я посмотрел руководство по Android Developer и скопировал процедуру.Тем не менее, URI возвращает ноль, и строка не вставляется.Я зарегистрировал провайдера в манифесте.Я думаю, что проблема с содержанием Uri.Имя пакета для моей папки называется app.android.com.todo, а поставщик содержимого - TodosProvider.Поставщик контента находится в пакете, называемом data, который находится внутри app.android.com.todo.Название таблицы - категории.В результате я подумал, что URI - это содержимое: //app.android.com.todo.todosprovider/categories.

Я попытался удалить app.android из списка прав и попытался изменить todosprovider на TodosProvider.Я попытался изменить полномочия на app.android.com.todo.data.todosprovider (я добавил данные в полномочия), потому что поставщик находится в папке с именем data.Uri по-прежнему нулевой.

Это класс, в который помещаются все строки и константы

package app.android.com.todo.data;

import android.net.Uri;
import android.provider.BaseColumns;

public final class TodoContract {
//URI
public static final String CONTENT_AUTHORITY="app.android.com.todo.todosprovider";

public static final String PATH_CATEGORIES= "categories";
public static final Uri BASE_CONTENT_URI= Uri.parse("content://"+ CONTENT_AUTHORITY);

public static final class CategoriesEntry implements BaseColumns {
    public static final Uri CONTENT_URI= Uri.withAppendedPath(BASE_CONTENT_URI,PATH_CATEGORIES);

    // Table name
    public static final String TABLE_NAME = "categories";
    //column names
    public static final String _ID = BaseColumns._ID;
    public static final String COLUMN_DESCRIPTION = "description";
}

}. Здесь я пытаюсь вставить строку

private void CreateCategory(){
ContentValues values = new ContentValues(1);
values.put(TodoContract.CategoriesEntry.
            COLUMN_DESCRIPTION, "meme");

Uri uri= getContentResolver().insert
            (TodoContract.CategoriesEntry.CONTENT_URI, values);
System.out.println( TodoContract.CategoriesEntry.CONTENT_URI+
            " values "+ values + "  inserted category "+ uri);

}

Это пакет вспомогательного класса базы данных app.android.com.todo.data;

import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import app.android.com.todo.data.TodoContract.CategoriesEntry;
import app.android.com.todo.data.TodoContract.TodosEntry;

public class DatabaseHelper extends SQLiteOpenHelper{

private static final String DATABASE_NAME = "todosapp.db";
private static final int DATABASE_VERSION = 1;
private static final String TABLE_CATEGORIES_CREATE=
        "CREATE TABLE " + CategoriesEntry.TABLE_NAME + " (" +
                CategoriesEntry._ID + " INTEGER PRIMARY KEY, " +
                CategoriesEntry.COLUMN_DESCRIPTION + " TEXT " +
                ")";


public DatabaseHelper(Context context ) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {

    db.execSQL(TABLE_CATEGORIES_CREATE);


}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    db.execSQL("DROP TABLE IF EXISTS " + CategoriesEntry.TABLE_NAME);
    onCreate(db);
}

} Это класс поставщика.Методы курсора, вставки, удаления, обновления, getType и запроса равны нулю.

public class TodosProvider extends ContentProvider {
//constants for the operation, the amount does not matter, must be unique

private  static final int TODOS=1;
private  static final int TODOS_ID=2;
private  static final int CATEGORIES=3;
private  static final int CATEGORIES_ID=4;

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

static{


    uriMatcher.addURI(CONTENT_AUTHORITY,
            PATH_CATEGORIES,CATEGORIES);
    uriMatcher.addURI(CONTENT_AUTHORITY,
            PATH_CATEGORIES + "/#", CATEGORIES_ID);
}

private DatabaseHelper helper;

@Override
public boolean onCreate() {
    helper= new DatabaseHelper(getContext());
    return false;
}

}

Я печатаю content_uri, values ​​и uri в систему, когда пытаюсь создать категорию.Content_uri и значения не равны NULL, но URI равен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...