2016-04-02 9 views
1

Ben biraz amatörüm ve android çevrimiçi kursumu yapıyorum. Ben buradaContentUris.withAppendedId ve Uri.buildUpon() arasındaki fark appendPath

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

Ben eklenmiş locationSetting ile bir URI olsun ben CONTENT_URIeklenen id ile bir URI olsun İşte bir URI

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

sonuna eklemek için bu 2 farklı kod parçacıkları bulundu için CONTENT_URI

Her ikisi de bana işlevsellik?

cevap

1

biz varsayarsak: o zaman

CONTENT_URI = content://com.example.myapp 

Şimdi

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

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

bakalım 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(); 
    } 
} 

fark, bu iki yöntemi kullanarak içindedir:

appendEncodedPath vs appendPath

Encoding and Decoding URI Components

bir URI her bir bileşeni yasal karakter sınırlı sayıda izin verir. Diğer karakterler, önce bir URI'ye gömülmeden önce kodlanmalıdır. Bir URI'den orijinal karakterleri kurtarmak için, kodu çözülebilir. Yani

:

appendEncodedPath

yoluna verilen segmentini ekler.

appendPath

verilen segmenti kodlar ve yol için ekler.