2013-09-15 2 views
4

Это работало! Я не уверен, что изменилось. Я использую git, и я просматривал свои коммиты и код часами.URIMatcher не соответствует

Поскольку заголовок указывает, что мой совремник ури прекратил сопоставление.

Ниже я вставил соответствующие части моего поставщика контента.

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); 
     } 

Everytime по умолчанию хит. Не совпадение сделано, я заканчиваю FC и следующую строку в моем журнале.

E/AndroidRuntime(1979): Caused by: java.lang.UnsupportedOperationException: Unmatched(-1) URI: content://com.snot.bodyweightworkout.database.provider/program 

Я занимаюсь этим в течение нескольких часов, и мне действительно нужны свежие глаза, чтобы взять на себя пик. Поэтому, если какая-то душа может взглянуть на него, я буду очень этому благодарен. Заранее спасибо.

+1

Вы можете попробовать без запуска '/', поэтому 'program' вместо'/program' в метод 'addUri()'. – Luksprog

+0

Ты мужчина !!! Ранее сегодня моя галактика s3 ssung сломалась, и я тестирую этот старый HTC Desire с cm7.2. Благодаря! – user672009

+0

@Luksprog, пожалуйста, обновите свой комментарий до ответа, чтобы я мог закрыть его, если вы хотите получить кредиты. – user672009

ответ

3

Там нет необходимости в стартовом /, поэтому определить свой метод addUri() называет так:

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); 
} 
Смежные вопросы