2012-02-11 23 views
22

हाल ही में अपडेट किए गए एंड्रॉइड देव गाइड में, सामग्री प्रदाताओं के लिए प्रलेखन में Contract Classes शीर्षक वाला एक अनुभाग शामिल है। हालांकि संपर्क के लिए एक उदाहरण के लिए एक लिंक है, यह तुरंत स्पष्ट नहीं था एक अनुबंध क्लास है क्या और कैसे मैं अपने कस्टम सामग्री प्रदाता के लिए एक बना सकता हूँकॉन्ट्रैक्ट क्लास क्या है और इसका उपयोग

इस पर कुछ सहायता की सराहना करते हैं।

धन्यवाद!

+0

यह भी देखें http://stackoverflow.com/questions/17451931/how-to-use-a-contract-class-in-android – OneWorld

उत्तर

12

एक अनुबंध वर्ग स्थिरांक कि मदद अनुप्रयोगों सामग्री यूआरआई, स्तंभ नाम, आशय कार्यों, और की अन्य सुविधाओं एक सामग्री प्रदाता के साथ काम को परिभाषित करता है। एक प्रदाता के साथ अनुबंध कक्षाएं स्वचालित रूप से शामिल नहीं हैं; प्रदाता के डेवलपर को उन्हें परिभाषित करना होता है और फिर उन्हें अन्य डेवलपर्स के लिए उपलब्ध कराते हैं।

आप अपनी खुद की अनुबंध कक्षा बना सकते हैं और वहां कुछ स्थिरांक परिभाषित कर सकते हैं। उदाहरण के लिए, स्तंभ नाम जिसे आप बाद में कोड है कि डेटाबेस के लिए प्रश्नों बनाता में कॉल कर सकते हैं आदि

अच्छा उदाहरण कैसे अनुबंध वर्ग प्रयोग किया जाता है को देखने के इस सूत्र Android - How do I load a contact Photo?

3

Contract स्थिरांक कि यूआरआई के लिए नामों को परिभाषित के लिए एक कंटेनर है टेबल और कॉलम। यह एक ही पैकेज में सभी अन्य वर्गों में एक ही स्थिरांक प्रदान करता है।

12

एक अनुबंध वर्ग क्या है?

एक अनुबंध वर्ग एक publicfinal वर्ग कि यूआरआई के लिए निरंतर परिभाषाएँ, स्तंभ नाम, MIME प्रकार, और ContentProvider के बारे में अन्य मेटा डेटा होता है। इसमें यूआरआई में हेरफेर करने के लिए static सहायक विधियां भी हो सकती हैं।

क्यों किया जाता है?

  1. अनुबंध कक्षा सामग्री प्रदाता और अन्य अनुप्रयोगों के बीच एक अनुबंध स्थापित करता है। यह सुनिश्चित करता है कि आपके सामग्री प्रदाता सही ढंग से पहुँचा जा सकता है, भले ही परिवर्तन यूआरआई के वास्तविक मूल्यों के लिए, स्तंभ नाम आदि कर रहे हैं
  2. वह अपने स्थिरांक के लिए स्मरक नाम प्रदान करता है के बाद से, डेवलपर्स कम के लिए गलत मान का उपयोग करने की संभावना है कॉलम नाम या यूआरआई।
  3. अपने सामग्री प्रदाता का उपयोग करना चाहते हैं, जो ग्राहकों को Javadoc दस्तावेज़ उपलब्ध करना आसान है।

इसका उपयोग कैसे किया जाता है? मौसम की मेज और स्थान तालिका:

यहाँ दो टेबल युक्त एक मौसम एप्लिकेशन के लिए बनाया गया एक नमूना अनुबंध वर्ग टुकड़ा है। टिप्पणी और कुछ तरीकों को इसे छोटा रखने के लिए छोड़ दिया जाता है। आम तौर पर इसे अच्छी तरह से टिप्पणी की जानी चाहिए।

public class WeatherContract { 

    public static final String CONTENT_AUTHORITY = 
      "com.example.android.sunshine.app"; 
    public static final Uri BASE_CONTENT_URI = 
      Uri.parse("content://" + CONTENT_AUTHORITY); 
    public static final String PATH_WEATHER = "weather"; 
    public static final String PATH_LOCATION = "location"; 

    /**Inner class that defines the table contents of the location table. */ 
    public static final class LocationEntry implements BaseColumns { 
     public static final String TABLE_NAME = "location"; 
     public static final String COLUMN_LOCATION_SETTING = "location_setting"; 
     public static final String COLUMN_CITY_NAME = "city_name"; 
     public static final String COLUMN_COORD_LAT = "coord_lat"; 
     public static final String COLUMN_COORD_LONG = "coord_long"; 

     public static final Uri CONTENT_URI = 
       BASE_CONTENT_URI.buildUpon().appendPath(PATH_LOCATION).build(); 

     // Custom MIME types 
     public static final String CONTENT_TYPE = 
       ContentResolver.CURSOR_DIR_BASE_TYPE + 
         "/" + CONTENT_AUTHORITY + "/" + PATH_LOCATION; 

     public static final String CONTENT_ITEM_TYPE = 
       ContentResolver.CURSOR_ITEM_BASE_TYPE + 
         "/" + CONTENT_AUTHORITY + "/" + PATH_LOCATION; 

     // Helper method 
     public static Uri buildLocationUri(long id) { 
      return ContentUris.withAppendedId(CONTENT_URI, id); 
     } 
    } 


    /** Inner class that defines the table contents of the weather table. */ 
    public static final class WeatherEntry implements BaseColumns { 

     public static final String TABLE_NAME = "weather"; 

     public static final String COLUMN_LOC_KEY = "location_id"; 
     public static final String COLUMN_DATE = "date"; 
     public static final String COLUMN_WEATHER_ID = "weather_id"; 
     public static final String COLUMN_SHORT_DESC = "short_desc"; 
     public static final String COLUMN_MIN_TEMP = "min"; 
     public static final String COLUMN_MAX_TEMP = "max"; 
     public static final String COLUMN_HUMIDITY = "humidity"; 
     public static final String COLUMN_PRESSURE = "pressure"; 
     public static final String COLUMN_WIND_SPEED = "wind"; 
     public static final String COLUMN_DEGREES = "degrees"; 

     public static final Uri CONTENT_URI = 
       BASE_CONTENT_URI.buildUpon().appendPath(PATH_WEATHER).build(); 

     public static final String CONTENT_TYPE = 
       ContentResolver.CURSOR_DIR_BASE_TYPE + "/" + CONTENT_AUTHORITY + 
         "/" + PATH_WEATHER; 

     public static final String CONTENT_ITEM_TYPE = 
       ContentResolver.CURSOR_ITEM_BASE_TYPE + "/" + CONTENT_AUTHORITY + 
         "/" + PATH_WEATHER; 

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

     . 
     . 
     . 
    } 
} 
संबंधित मुद्दे