找不到com.tfw.todolist的提供者信息

时间:2020-04-04 11:57:30

标签: java android

我正在编写ToDo应用,由于某种原因,我的ToDoProvider无法正常工作。在实施语言转换器之前,它工作正常。我测试了其他线程中发布的内容,但是没有任何效果。 在这篇文章的结尾,有我的日志。如果您需要更多信息,只需将其写在评论中,我将添加所需的内容。 希望有人可以帮助我。

Manifest.xml:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tfw.todolist">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/launcher_icon"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/launcher_icon"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

...

        <provider
            android:name=".data.ToDoProvider"
            android:authorities="com.tfw.todolist.data"
            android:exported="true"
            android:enabled="true" />
    </application>

</manifest>

ToDoContract.java


package com.tfw.todolist.data;

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

public final class ToDoContract {

    //constructor
    private ToDoContract(){}

    //adding URI
    public static final String CONTENT_AUTHORITY = "com.tfw.todolist";
    public static final Uri BASE_CONTENT_URI = Uri.parse("content://" + CONTENT_AUTHORITY);
    public static final String PATH_TODO = "todo";


    public static final class ToDoEntry implements BaseColumns{

        /**
         * The MIME type of the {@link #CONTENT_URI} for a list of Todo_
         */
        public static final String CONTENT_LIST_TYPE =
                ContentResolver.CURSOR_DIR_BASE_TYPE + "/" + CONTENT_AUTHORITY + "/" + PATH_TODO;

        /**
         * The MIME type of the {@link #CONTENT_URI} for a single Todo_
         */
        public static final String CONTENT_ITEM_TYPE =
                ContentResolver.CURSOR_ITEM_BASE_TYPE + "/" + CONTENT_AUTHORITY + "/" + PATH_TODO;

       // Uri to access the provider
        public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_CONTENT_URI,PATH_TODO);

       //table name and column names
        public static final String TABLE_NAME = "ToDo";
        public static final String _ID = BaseColumns._ID;
        public static final String COLUMN_HEADING = "heading";
        public static final String COLUMN_MESSAGE = "message";
        public static final String COLUMN_DATE = "date";
        public static final String COLUMN_TIME = "time";
        public static final String COLUMN_NOTIFICATION = "notification";


    }
}

ToDoProvider.java

package com.tfw.todolist.data;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.util.Log;


import com.tfw.todolist.data.ToDoContract.ToDoEntry;

public class ToDoProvider extends ContentProvider {
    private ToDoDbHelper mDbHelper;

    //Add Uri Matcher
    private static final int TODO = 100;
    private static final int TODO_ID = 101;
    private static final UriMatcher sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    static {
        sUriMatcher.addURI(ToDoContract.CONTENT_AUTHORITY,ToDoContract.PATH_TODO,TODO);
        sUriMatcher.addURI(ToDoContract.CONTENT_AUTHORITY,ToDoContract.PATH_TODO + "/#",TODO_ID);
    }


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

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

        int match = sUriMatcher.match(uri);

        switch(match){
            case TODO:
                cursor = db.query(ToDoEntry.TABLE_NAME,projection,selection,selectionArgs,null,null,s1);
                break;

            case TODO_ID:
                selection = ToDoEntry._ID + "=?";
                selectionArgs = new String[]{String.valueOf(ContentUris.parseId(uri))};
                cursor = db.query(ToDoEntry.TABLE_NAME,projection,selection,selectionArgs,null,null,s1);
                break;

            default:
                throw new IllegalArgumentException(uri + "INVALID");
        }
        cursor.setNotificationUri(getContext().getContentResolver(),uri);
        return cursor;
    }

    @Override
    public String getType(Uri uri) {

        final int match = sUriMatcher.match(uri);
        switch (match){
            case TODO:
                return ToDoEntry.CONTENT_LIST_TYPE;

            case TODO_ID:
                return ToDoEntry.CONTENT_ITEM_TYPE;

            default:
                throw new IllegalStateException("Unknown URI" + uri + " with match" + match);
        }
    }

日志:

2018-09-13 00:12:42.420 23210-23210/com.tfw.todolist D/MainActivity: Locale: english (us)
2018-09-13 00:12:42.487 23210-23250/com.tfw.todolist I/Adreno-EGL: <qeglDrvAPI_eglInitialize:379>: QUALCOMM Build: 10/21/15, 369a2ea, I96aee987eb
2018-09-13 00:12:42.491 23210-23250/com.tfw.todolist I/OpenGLRenderer: Initialized EGL, version 1.4
2018-09-13 00:12:42.491 23210-23250/com.tfw.todolist D/OpenGLRenderer: Swap behavior 1
2018-09-13 00:12:42.512 23210-23210/com.tfw.todolist I/ViewConfigCompat: Could not find method getScaledScrollFactor() on ViewConfiguration
2018-09-13 00:12:43.043 23210-23260/com.tfw.todolist E/ActivityThread: Failed to find provider info for com.tfw.todolist
2018-09-13 00:12:43.241 23210-23264/com.tfw.todolist E/ActivityThread: Failed to find provider info for com.tfw.todolist

0 个答案:

没有答案