30

तो इस विषय पर बहुत ही वीडियो देखने के बाद मैंने डिज़ाइन पैटर्न बी के साथ जाने का फैसला किया। Servicehelper के साथ एक contentprovider का उपयोग करना।Google आईओ रेस्ट डिज़ाइन पैटर्न, समाप्त सामग्रीप्रोवाइडर और अब अटक गया

  • MyProvider
  • MyDatabase
  • Mycontract

गतिविधि में मैं अब contentresolver हो और प्रदाता क्वेरी कर सकते हैं:

google design pattern on rest

मूल रूप से मैं निम्न फ़ाइलें है । अब तक बहुत अच्छा काम कर रहा है।

अब मुझे अपने REST API से डेटा लाने के लिए मेरे contentprovider को सिंक करने की आवश्यकता है। इस प्रकार मुझे एक सेवा सहायक सेवा और आराम विधि को लागू करने की आवश्यकता है। Google आईओ ऐप का अध्ययन करने से मुझे बहुत मदद मिली है, एंड्रॉइड के साथ नौसिखिया आई है, इसलिए इसे अभी भी समझना मुश्किल है।

मुझे लगता है कि Google बाहरी डेटा को संसाधित करने के लिए रिमोट हैंडलर का उपयोग करता है, मुझे लगता है कि वे आरेख में प्रोसेसर कक्षाएं हैं?

जो मुझे नहीं पता है कि मैं नेटवर्क से डेटा प्राप्त करने के लिए सर्विसहेपर + सेवा भाग को कैसे कार्यान्वित कर सकता हूं।

  • मैं सेवा सहायक पर कहां से कॉल करूं?
  • सेवा और सहायक को वास्तव में क्या करने की ज़रूरत है?
  • क्या इस सटीक डिजाइन पैटर्न के कोई अच्छे उदाहरण हैं?

मैंने इस बारे में ढेर पर कई विषयों को पढ़ा है, सभी अलग-अलग तरीकों का सुझाव देते हैं। मुझे एक उदाहरण मिला जो एक रेस्टप्रोवाइडर घोषित करता है और फिर मेरे प्रदाता को उस प्रदाता को विस्तारित करना होता है। मुझे उन समाधानों को पसंद नहीं है और मैं इस संरचित डिजाइन पैटर्न का पालन करना चाहता हूं। मैं आशा करता हूं कि आप लोग मेरी मदद कर सकते हैं!

संपादित करें: परियोजना स्रोत उपलब्ध है: https://github.com/samvdb/TracknTrace

+0

क्या आपके पास संदर्भित Google IO वीडियो का कोई लिंक है? –

+0

मुझे लगता है कि आप इस परियोजना में अपने सभी उत्तर पा सकते हैं: https://github.com/necronet/Eli-G इसे [इस SO पोस्ट] में विस्तृत किया गया है (http://stackoverflow.com/questions/ 4948152/जरूरत नमूना-android-आराम-ग्राहक-परियोजना-जो-औजार-वर्जिल-dobjanschi-बाकी)। – Zakaria

+2

हैलो ज़कारिया, मैंने एक सप्ताह पहले उस उदाहरण को पाया लेकिन यह उस पैटर्न का एक बहुत गंदे कार्यान्वयन है। यह एक सेवा के बजाय आरईएसटी को संभालने के लिए एक और Contentprovider बनाता है। हालांकि आपके उत्तर के लिए धन्यवाद लेकिन मैं छवि में वर्णित पैटर्न के पूर्ण कार्यान्वयन की तलाश में हूं। @ जॉन http://www.youtube.com/watch?v=xHXn3Kg2IQE – Sam

उत्तर

20

मेरी समझ में पैटर्न है:

  • एक खाली सक्रियता दिखाई और पृष्ठभूमि में सामग्री लोड न करें। जब लोडिंग विफल हो जाती है तो आप कुछ भी प्रदर्शित नहीं कर सकते हैं।
  • इसके बजाय प्रदर्शन एक सामग्री प्रदाता और एक एडाप्टर के माध्यम से डाटाबेस सुलभ में संग्रहीत डेटा - यह गारंटी देता है कि उपयोगकर्ता हमेशा एक सामग्री
  • पृष्ठभूमि में देखना नया डेटा लाने, एक बार डेटा फोन गतिविधि स्वचालित रूप से अद्यतन किया जाता है पर है

    मैं कहाँ सेवा सहायक पर कहते हैं: एडाप्टर

अपने प्रश्नों के

के माध्यम से (मैं क्रम बदल)?
मैं विगिल टॉक से पैटर्न ए चुनता हूं। उस स्थिति में कॉल आपके आवेदन पर निर्भर करता है। एप्लिकेशन प्रारंभ होने पर अपडेट को ट्रिगर कर सकता है, जब गतिविधि बनाई जाती है या जब उपयोगकर्ता अपडेट बटन चुनता है। मैं गतिविधि निर्माण पर चयन करेंगे।

आपने पैटर्न बी चुना है। उस स्थिति में यह स्पष्ट है कि सामग्री प्रदाता को अद्यतन को ट्रिगर करना होगा। कब? नया डेटा प्राप्त करने के लिए: निर्माण समय पर या पहली पढ़ने के बाद। मैं निर्माण समय का उपयोग करूंगा। अपने सामग्री प्रदाता में संबंधित कार्रवाई के बाद बनाने, अपडेट करने, हटाने के लिए।

क्या इस सटीक डिजाइन पैटर्न के कोई अच्छे उदाहरण हैं?
https://stackoverflow.com/a/8693919/734687 पर मेरी पोस्ट से: मुझे पता है कि केवल ओपन सोर्स संदर्भ कार्यान्वयन http://datadroid.foxykeep.com के तहत उपलब्ध है। यह एक पुस्तकालय है जिसका आप अपने आवेदन में उपयोग कर सकते हैं। आर्किटेक्चर के तहत/प्रस्तुति के तहत समझाया गया है - सुनिश्चित करें कि आप इसे पढ़ लें।

सेवा सहायक को वास्तव में क्या करने की आवश्यकता है?
यदि आप स्लाइड 1 पर slides देखते हैं तो यह एक सिंगलटन है जो सेवा को कॉल को समाहित करता है और अनुरोध आईडी के माध्यम से एसिंक्रोनस कॉल को संभालता है।

सेवा को वास्तव में क्या करने की आवश्यकता है?
सेवा (प्रस्तुति में स्लाइड 17) केवल यह सुनिश्चित करता है कि पृष्ठभूमि में कार्रवाई की जाती है।

+0

डेटाड्रॉइड का विकल्प विकल्प ए का कार्यान्वयन होने का दावा है, विकल्प बी नहीं। क्या यह गलत है? – Estel

+0

@ एस्टेल हाँ आप सही हैं। यह विकल्प ए का कार्यान्वयन है – Foxykeep