2016-04-02 2 views
1

Ich bin ein bisschen Amateur und mache meinen Android Online-Kurs. Ich fand diese zwei unterschiedlichen Code-Schnipsel zu einem URIUnterschied zwischen ContentUris.withApendedId und Uri.buildUpon(). AppendPath

public static Uri buildWeatherUri(long id) { 
    return ContentUris.withAppendedId(CONTENT_URI, id); 
} 

Hier habe ich einen URI zu CONTENT_URI

public static Uri buildWeatherLocation(String locationSetting) { 
    return CONTENT_URI.buildUpon().appendPath(locationSetting).build(); 
} 

Hier habe ich einen URI mit locationSetting erhalten beigefügten mit id erhalten anhängen angehängt zu CONTENT_URI

Ich frage mich, ob beide sa haben ich Funktionalität?

Antwort

1

wenn wir annehmen:

CONTENT_URI = content://com.example.myapp 

dann

buildWeatherUri(5) -> content://com.example.myapp/5 

buildWeatherLocation("location") -> content://com.example.myapp/location 

Nun wollen wir sehen ContentUris'source code:

public class ContentUris { 

    public static long parseId(Uri contentUri) { 
     String last = contentUri.getLastPathSegment(); 
     return last == null ? -1 : Long.parseLong(last); 
    } 

    public static Uri.Builder appendId(Uri.Builder builder, long id) { 
     return builder.appendEncodedPath(String.valueOf(id)); 
    } 

    public static Uri withAppendedId(Uri contentUri, long id) { 
     return appendId(contentUri.buildUpon(), id).build(); 
    } 
} 

der Unterschied ist, diese beiden Methoden in Verwendung:

appendEncodedPath vs appendPath

Encoding and Decoding URI Components

Jede Komponente eines URI erlaubt eine begrenzte Anzahl von Rechts Zeichen. Andere Zeichen müssen zuerst codiert werden, bevor sie in einen URI eingebettet werden können. Um die ursprünglichen Zeichen von einem URI wiederherzustellen, können sie decodiert sein.

So:

appendEncodedPath

Hängt das angegebene Segment auf den Weg.

appendPath

Codiert das gegebene Segment und fügt es zu dem Pfad.