2012-12-11 10 views
11

दस्तावेज़ बताता है कि अगर प्रदाता सफलतापूर्वक लोड किया गया था, तो हमें सच वापस करना चाहिए, अन्यथा झूठी। मेरे कार्यान्वयन में, यदि मैं डेटाबेसहेल्पर == शून्य हूं तो मैं झूठी वापसी करूंगा।यदि सामग्री प्रदाता के ऑनक्रेट में झूठी वापसी हो तो क्या होगा?

मान लीजिए अब DatabaseHelper == null और झूठी onCreate में दिया जाता है, और बाद में कोड में कहीं प्रदाता क्वेरी, प्रदाता अभी भी पूछे जा रहा है और coz की यह दुर्घटना होगा।

मेरा प्रश्न है ContentProvider के ऑनक्रेट में झूठी वापसी का उपयोग क्या है? और क्रिएट पर असफल होने के बाद क्वेरी के लिए मुझे कैसे संभालना चाहिए? क्वेरी में फिर से चालू करें?

उत्तर

12

ContentProvider के ऑनक्रेट में झूठी वापसी का उपयोग क्या है?

जल्दी से एंड्रॉयड स्रोत के माध्यम से नेविगेट करके मैंने पाया कि, अब के लिए के रूप में, यह वास्तव में कोई फर्क नहीं पड़ता कि तुम क्या लौटने के लिए, यह अभी के लिए के रूप में नजरअंदाज कर दिया हो, फिर

परीक्षण और ActivityThread पर, attachInfo सही newInstance के बाद कहा जाता है ताकि आप ContentProvider स्रोत को देखो अगर at line 1058 जहां onCreate कहा जाता है और जैसा दिखता है:

/** 
* After being instantiated, this is called to tell the content provider 
* about itself. 
* 
* @param context The context this provider is running in 
* @param info Registered information about this content provider 
*/ 
public void attachInfo(Context context, ProviderInfo info) { 
    /* 
    * We may be using AsyncTask from binder threads. Make it init here 
    * so its static handler is on the main thread. 
    */ 
    AsyncTask.init(); 

    /* 
    * Only allow it to be set once, so after the content service gives 
    * this to us clients can't change it. 
    */ 
    if (mContext == null) { 
     mContext = context; 
     mMyUid = Process.myUid(); 
     if (info != null) { 
      setReadPermission(info.readPermission); 
      setWritePermission(info.writePermission); 
      setPathPermissions(info.pathPermissions); 
      mExported = info.exported; 
     } 
     ContentProvider.this.onCreate(); 
    } 
} 

ध्यान रखें कि यदि प्रलेखन कहते हैं तो कौन जानता है, शायद भविष्य में रिलीज में इसका इस्तेमाल/तय किया जाएगा।


मैं एक के बाद क्वेरी के लिए संभाल चाहिए कि कैसे onCreate असफल? क्वेरी में फिर से चालू करें?

मैं हाँ कहेंगे, जरूरी नहीं कि onCreate लेकिन आपके बहुत ही विधि है कि एक बार आरंभ करने और अपने DatabaseHelper या तो, कि हो सकता है अपने सबसे अच्छे प्रयास सुनिश्चित करता है, मैं onCreate

आप के प्रलेखन के अनुसार मतलब nontrivial प्रारंभ स्थगित चाहिए सामग्री प्रदाता तक (जैसे खोलने, उन्नयन, और स्कैनिंग डेटाबेस के रूप में)

प्रयोग किया जाता है तो तकनीकी रूप से आप के रूप में इरादा कर रहे होते, फिर भी यह टी बाहर जंगली है यहाँ तो सुरक्षित रहो।

+0

देर से स्वीकार करने के लिए खेद है, अच्छा जवाब! – Bear

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