Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Constants](https://developer.android.com/reference/android/content/UriMatcher#constants) \| [Ctors](https://developer.android.com/reference/android/content/UriMatcher#pubctors) \| [Methods](https://developer.android.com/reference/android/content/UriMatcher#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/android/content/UriMatcher#inhmethods)

# UriMatcher

*** ** * ** ***

` public class UriMatcher `   
` extends https://developer.android.com/reference/java/lang/Object ` ` `

|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | android.content.UriMatcher |

<br />

*** ** * ** ***

Utility class to aid in matching URIs in content providers.

To use this class, build up a tree of `UriMatcher` objects. For example:

```
    private static final int PEOPLE = 1;
    private static final int PEOPLE_ID = 2;
    private static final int PEOPLE_PHONES = 3;
    private static final int PEOPLE_PHONES_ID = 4;
    private static final int PEOPLE_CONTACTMETHODS = 7;
    private static final int PEOPLE_CONTACTMETHODS_ID = 8;

    private static final int DELETED_PEOPLE = 20;

    private static final int PHONES = 9;
    private static final int PHONES_ID = 10;
    private static final int PHONES_FILTER = 14;

    private static final int CONTACTMETHODS = 18;
    private static final int CONTACTMETHODS_ID = 19;

    private static final int CALLS = 11;
    private static final int CALLS_ID = 12;
    private static final int CALLS_FILTER = 15;

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

    static
    {
        sURIMatcher.addURI("contacts", "people", PEOPLE);
        sURIMatcher.addURI("contacts", "people/#", PEOPLE_ID);
        sURIMatcher.addURI("contacts", "people/#/phones", PEOPLE_PHONES);
        sURIMatcher.addURI("contacts", "people/#/phones/#", PEOPLE_PHONES_ID);
        sURIMatcher.addURI("contacts", "people/#/contact_methods", PEOPLE_CONTACTMETHODS);
        sURIMatcher.addURI("contacts", "people/#/contact_methods/#", PEOPLE_CONTACTMETHODS_ID);
        sURIMatcher.addURI("contacts", "deleted_people", DELETED_PEOPLE);
        sURIMatcher.addURI("contacts", "phones", PHONES);
        sURIMatcher.addURI("contacts", "phones/filter/*", PHONES_FILTER);
        sURIMatcher.addURI("contacts", "phones/#", PHONES_ID);
        sURIMatcher.addURI("contacts", "contact_methods", CONTACTMETHODS);
        sURIMatcher.addURI("contacts", "contact_methods/#", CONTACTMETHODS_ID);
        sURIMatcher.addURI("call_log", "calls", CALLS);
        sURIMatcher.addURI("call_log", "calls/filter/*", CALLS_FILTER);
        sURIMatcher.addURI("call_log", "calls/#", CALLS_ID);
    }
```

Starting from API level `https://developer.android.com/reference/android/os/Build.VERSION_CODES#JELLY_BEAN_MR2`, paths can start with a leading slash. For example:

```
        sURIMatcher.addURI("contacts", "/people", PEOPLE);
```

Then when you need to match against a URI, call `https://developer.android.com/reference/android/content/UriMatcher#match(android.net.Uri)`, providing the URL that you have been given. You can use the result to build a query, return a type, insert or delete a row, or whatever you need, without duplicating all of the if-else logic that you would otherwise need. For example:

```
    public String getType(Uri url)
    {
        int match = sURIMatcher.match(url);
        switch (match)
        {
            case PEOPLE:
                return "vnd.android.cursor.dir/person";
            case PEOPLE_ID:
                return "vnd.android.cursor.item/person";
... snip ...
                return "vnd.android.cursor.dir/snail-mail";
            case PEOPLE_ADDRESS_ID:
                return "vnd.android.cursor.item/snail-mail";
            default:
                return null;
        }
    }
```
instead of:

```
    public String getType(Uri url)
    {
        List pathSegments = url.getPathSegments();
        if (pathSegments.size() >= 2) {
            if ("people".equals(pathSegments.get(1))) {
                if (pathSegments.size() == 2) {
                    return "vnd.android.cursor.dir/person";
                } else if (pathSegments.size() == 3) {
                    return "vnd.android.cursor.item/person";
... snip ...
                    return "vnd.android.cursor.dir/snail-mail";
                } else if (pathSegments.size() == 3) {
                    return "vnd.android.cursor.item/snail-mail";
                }
            }
        }
        return null;
    }

     
```

<br />

## Summary

| ### Constants ||
|---|---|
| `int` | `https://developer.android.com/reference/android/content/UriMatcher#NO_MATCH` <br /> |

| ### Public constructors ||
|---|---|
| ` https://developer.android.com/reference/android/content/UriMatcher#UriMatcher(int)(int code) ` Creates the root node of the URI tree. |

| ### Public methods ||
|---|---|
| ` void` | ` https://developer.android.com/reference/android/content/UriMatcher#addURI(java.lang.String,%20java.lang.String,%20int)(https://developer.android.com/reference/java/lang/String authority, https://developer.android.com/reference/java/lang/String path, int code) ` Add a URI to match, and the code to return when this URI is matched. |
| ` int` | ` https://developer.android.com/reference/android/content/UriMatcher#match(android.net.Uri)(https://developer.android.com/reference/android/net/Uri uri) ` Try to match against the path in a url. |

### Inherited methods

From class ` https://developer.android.com/reference/java/lang/Object ` ` https://developer.android.com/reference/java/lang/Object` ` https://developer.android.com/reference/java/lang/Object#clone()() `

Creates and returns a copy of this object.
` boolean` ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) `

Indicates whether some other object is "equal to" this one.
` void` ` https://developer.android.com/reference/java/lang/Object#finalize()() `

Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.
` final https://developer.android.com/reference/java/lang/Class<?>` ` https://developer.android.com/reference/java/lang/Object#getClass()() `

Returns the runtime class of this `Object`.
` int` ` https://developer.android.com/reference/java/lang/Object#hashCode()() `

Returns a hash code value for the object.
` final void` ` https://developer.android.com/reference/java/lang/Object#notify()() `

Wakes up a single thread that is waiting on this object's monitor.
` final void` ` https://developer.android.com/reference/java/lang/Object#notifyAll()() `

Wakes up all threads that are waiting on this object's monitor.
` https://developer.android.com/reference/java/lang/String` ` https://developer.android.com/reference/java/lang/Object#toString()() `

Returns a string representation of the object.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos) `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis) `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed.
` final void` ` https://developer.android.com/reference/java/lang/Object#wait()() `

Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*.

## Constants

### NO_MATCH

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public static final int NO_MATCH
```

<br />

<br />

Constant Value: -1 (0xffffffff)

## Public constructors

### UriMatcher

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public UriMatcher (int code)
```

Creates the root node of the URI tree.

<br />

| Parameters ||
|---|---|
| `code` | `int`: the code to match for the root URI <br /> |

## Public methods

### addURI

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public void addURI (String authority, 
                String path, 
                int code)
```

Add a URI to match, and the code to return when this URI is matched. URI nodes may be exact match string, the token "\*" that matches any text, or the token "#" that matches only numbers.

Starting from API level `https://developer.android.com/reference/android/os/Build.VERSION_CODES#JELLY_BEAN_MR2`, this method will accept a leading slash in the path.

<br />

| Parameters ||
|---|---|
| `authority` | `String`: the authority to match <br /> |
| `path` | `String`: the path to match. \* may be used as a wild card for any text, and # may be used as a wild card for numbers. <br /> |
| `code` | `int`: the code that is returned when a URI is matched against the given components. Must be positive. <br /> |

### match

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public int match (Uri uri)
```

Try to match against the path in a url.

<br />

| Parameters ||
|---|---|
| `uri` | `Uri`: The url whose path we will match against. <br /> |

| Returns ||
|---|---|
| `int` | The code for the matched node (added using addURI), or -1 if there is no matched node. <br /> |