我正在编写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