Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android URIMatcher没有';不匹配_Android_Android Contentprovider - Fatal编程技术网

Android URIMatcher没有';不匹配

Android URIMatcher没有';不匹配,android,android-contentprovider,Android,Android Contentprovider,这很有效!我不确定是什么改变了。我确实使用git,我已经检查了我的提交和代码好几个小时了 正如标题所示,我的uri匹配器已停止匹配 下面我粘贴了我的内容提供商的相关部分 public class Provider extends ContentProvider { private static final String TAG = "Provider"; private static final String SCHEME = ContentResolver.SCHEME_CON

这很有效!我不确定是什么改变了。我确实使用git,我已经检查了我的提交和代码好几个小时了

正如标题所示,我的uri匹配器已停止匹配

下面我粘贴了我的内容提供商的相关部分

public class Provider extends ContentProvider {
    private static final String TAG = "Provider";
    private static final String SCHEME = ContentResolver.SCHEME_CONTENT;
    private static final String AUTHORITY = "com.snot.bodyweightworkout.database.provider";
    private static final String BASE_URI = SCHEME + AUTHORITY;

    public static final Uri URI_EXERCISES = Uri.parse(BASE_URI + "/exercise");
    public static final Uri URI_PROGRAMS = Uri.parse(BASE_URI + "/program");
    public static final Uri URI_PROGRAM_EXERCISES = Uri.parse(BASE_URI + "/program/#/exercise");

    private static final int EXERCISE = 1;
    private static final int EXERCISES = 2;
    private static final int PROGRAM = 3;
    private static final int PROGRAMS = 4;
    private static final int PROGRAM_EXERCISES = 5;

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

    static
    {
        sURIMatcher.addURI(AUTHORITY, "/exercise", EXERCISES);
        sURIMatcher.addURI(AUTHORITY, "/exercise/#", EXERCISE);
        sURIMatcher.addURI(AUTHORITY, "/program", PROGRAMS);
        sURIMatcher.addURI(AUTHORITY, "/program/#", PROGRAM);
        sURIMatcher.addURI(AUTHORITY, "/program/#/exercise", PROGRAM_EXERCISES);
    }

然后是应该进行实际匹配的部分

@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
    Log.v(TAG, "URI: " + uri);
    Cursor result = null;
    int match = sURIMatcher.match(uri);
    switch(match)
    {
        case PROGRAMS:
            result = DatabaseHandler
                .getInstance(getContext())
                .getReadableDatabase()
                .query(Program.TABLE_NAME, Program.FIELDS, null, null, null, null, null, null);
            result.setNotificationUri(getContext().getContentResolver(), URI_PROGRAMS);
            break;
        case PROGRAM:
            final long pid = Long.parseLong(uri.getLastPathSegment());
            result = DatabaseHandler
                .getInstance(getContext())
                .getReadableDatabase()
                .query(Program.TABLE_NAME, Program.FIELDS,
                        Program.COL_ID + " IS ?",
                        new String[] { String.valueOf(pid) }, null, null, null, null);
            result.setNotificationUri(getContext().getContentResolver(), URI_PROGRAMS);
            break;
       ...
        default:
            throw new UnsupportedOperationException("Unmatched(" + match + ") URI: " + uri.toString());
我尝试使用如下游标加载程序进行查询:

     getLoaderManager().initLoader(0, null, new LoaderManager.LoaderCallbacks<Cursor>() {
         @Override
         public Loader<Cursor> onCreateLoader(int id, Bundle args) {
             return new CursorLoader(getActivity(), Provider.URI_PROGRAMS, Program.FIELDS, null, null, null);
         }
static {
   sURIMatcher.addURI(AUTHORITY, "exercise", EXERCISES);
   sURIMatcher.addURI(AUTHORITY, "exercise/#", EXERCISE);
   sURIMatcher.addURI(AUTHORITY, "program", PROGRAMS);
   sURIMatcher.addURI(AUTHORITY, "program/#", PROGRAM);
   sURIMatcher.addURI(AUTHORITY, "program/#/exercise", PROGRAM_EXERCISES);
}

我已经在这部片子上演了好几个小时了,我真的需要一些新鲜的眼睛来欣赏它。所以,如果有一个善良的灵魂可以看看它,我会非常感激。提前感谢。

无需启动
/
,因此请定义
addUri()
方法调用,如下所示:

     getLoaderManager().initLoader(0, null, new LoaderManager.LoaderCallbacks<Cursor>() {
         @Override
         public Loader<Cursor> onCreateLoader(int id, Bundle args) {
             return new CursorLoader(getActivity(), Provider.URI_PROGRAMS, Program.FIELDS, null, null, null);
         }
static {
   sURIMatcher.addURI(AUTHORITY, "exercise", EXERCISES);
   sURIMatcher.addURI(AUTHORITY, "exercise/#", EXERCISE);
   sURIMatcher.addURI(AUTHORITY, "program", PROGRAMS);
   sURIMatcher.addURI(AUTHORITY, "program/#", PROGRAM);
   sURIMatcher.addURI(AUTHORITY, "program/#/exercise", PROGRAM_EXERCISES);
}

您可能希望在不启动
/
的情况下进行尝试,因此
程序
而不是
addUri()
方法中的
/program
。您就是那个人!!!今天早些时候,我的三星galaxy s3坏了,我正在用cm7.2测试这台旧的HTC。谢谢@Luksprog请将您的评论升级到一个答案,这样如果您需要积分,我就可以结束使用。Jelly Bean 4.3中添加了Leading
/
,所以不要使用它,它只会在涉及解析的某些情况下限制兼容性并增加惰性。