Проблема с сопоставлением URI в Android - PullRequest
3 голосов
/ 18 января 2011

У меня есть строка полномочий, определенная следующим образом:

public final static String AUTHORITY = "dsndata.sds2mobile.jobprovider";

За ней следует издание для UriMatcher:

uriMatcher.addURI(JobMetaData.AUTHORITY, "/JobNames/*",
                      JOBNAME_SINGLE_URI);

URI, который передается на коммутатор:

content://dsndata.sds2mobile.jobprovider/JobNames/test

Это падает через переключатель и достигает значения по умолчанию (которое вызывает исключение IllegalArgumentException).

Я что-то упустил?Я искал и не могу найти ничего, что могло бы объяснить несоответствие.

Ответы [ 2 ]

6 голосов
/ 16 ноября 2011

У меня была такая же проблема с IllegalArgumentException. Даже те, у которых были отладки Ури, были такими же! [сводил меня с ума]. Если вы определили сначала * / match, это похоже на совпадение и помешает другим. ЗАКАЗ ВАЖЕН !!

Я переупорядочил, и external_warning_id теперь работает нормально.

//putting it first as /* seems to get matched first
    URL_MATCHER.addURI(AUTHORITY, TABLE_NAME.toLowerCase() + "/external_warning_id" + "/*",
            EXTERNAL_WARNING_ID);

// was the first entry in static block
URL_MATCHER.addURI(AUTHORITY, TABLE_NAME.toLowerCase() + "/*", WARNING__ID);
4 голосов
/ 18 января 2011

Попробуйте удалить начальный слеш:

uriMatcher.addURI(JobMetaData.AUTHORITY, "JobNames/*",
                  JOBNAME_SINGLE_URI);

вместо

uriMatcher.addURI(JobMetaData.AUTHORITY, "/JobNames/*",
                  JOBNAME_SINGLE_URI);

(Update)

С предоставленным кодом, Я заработал, переместив эту строку в верх Порядок определения важен, и кажется, что некоторые другие ваши совпадения так или иначе конфликтуют. В любом случае, перемещение наверх сработало.

...