2013-02-25 19 views
12

मेरी कक्षा इस तरह दिखता है:गतिविधि के बिना कक्षा में getContentResolver का उपयोग कैसे करें?

public class sendInformation{ 

    public void test() throws Exception { 
    Uri uri = SuspiciousActivityTable.CONTENT_URI; 
    getContentResolver().update(uri, values2, where,new String[]{"Null"}); 
    } 
    } 
} 

लेकिन यह कहना getContentResolver() मौजूद नहीं है, मैं जानता हूँ कि मैं इस काम करने के लिए एक संदर्भ या गतिविधि की जरूरत है लेकिन मैं कैसे सही प्रसंग यहाँ मिलता है?

+0

'सार्वजनिक शून्य class' कि कोई मतलब नहीं है। कक्षाओं में वापसी का प्रकार नहीं हो सकता है। –

+0

ठीक है तो इस वर्ग को दूसरी कक्षा से बुलाया जाता है जो गतिविधि को बढ़ाता है, इसलिए मुझे उस संदर्भ को पारित करना चाहिए कि मैं यह कैसे कर सकता हूं? – user2033349

+0

मेरा संपादन देखें। आम तौर पर आप 'this' 'test()' –

उत्तर

27

आपको एक संदर्भ को पारित करने की आवश्यकता होगी, यहां तक ​​कि ContentResolver कक्षा को तत्काल संदर्भ के लिए एक वैध संदर्भ की आवश्यकता है।

public void test(Context context) throws Exception { 
    Uri uri = SuspiciousActivityTable.CONTENT_URI; 
    context.getContentResolver().update(uri, values2, where,new String[]{"Null"}); 
    } 

और कॉल करने के लिए:

सबसे आसान तरीका विधि के लिए एक तर्क के रूप है (यह मानते हुए कि वर्ग कि test शामिल instantiated है और अपनी गतिविधि का नाम MyActivity < है - Activity नाम से बदलें आप से test())

try{ 
    sendInformationInstanceVariable.test (MyActivity.this); 
} 
catch (Exception e) 
{ 
e.printStackTrace(); 
} 

कॉल कर रहे हैंको thisपर संक्षिप्त किया जा सकता है यदि आप अज्ञात भीतरी कक्षा के अंदर से test() पर कॉल नहीं कर रहे हैं।

इसके अलावा, अगर अपने वर्ग वास्तव में एक अच्छा कारण नहीं है instantiated किया जाना है, test() एक static विधि बनाने, इस तरह विचार करें: आपके Activity से

public static void test(Context context) throws Exception { 
     Uri uri = SuspiciousActivityTable.CONTENT_URI; 
     context.getContentResolver().update(uri, values2, where,new String[]{"Null"}); 
     } 

उसके बाद, आप एक की जरूरत के बिना इस विधि कॉल उदाहरण:

try{ 
    sendInformation.test (MyActivity.this); 
} 
catch (Exception e) 
{ 
e.printStackTrace(); 
} 

अन्त में, फेंक Exception बुरा अभ्यास है, अच्छे कारण के बिना यह मत करो करते हैं और आप एक अच्छा कारण है संभव के रूप में विशिष्ट होना करते हैं।

+1

बहुत धन्यवाद, मैं इस बारे में इतना भ्रमित था, जब आप समझते हैं कि आप क्या कर रहे हैं तो आसान है :) – user2033349

+0

आप इसे सेवा में कैसे करेंगे?मेरी समझ यह है कि आप एक सेवा के लिए _cannot_ पास संदर्भ। –

+1

@ robertotomás एक सेवा आईएसए संदर्भ –

8
जहां आपके आवेदन शुरू होता है (और आप getApplicationContext() की पहुंच है) और बिंदु जहाँ आप test() फोन, आप अपने sendInformation वर्ग के लिए एक Context में उत्तीर्ण होना होगा के बीच कहीं न कहीं

। मैं क्या जीवन चक्र अपने sendInformation वर्ग है पर देखो और विभिन्न एंड्रॉयड घटकों (अनुप्रयोग, गतिविधि, टुकड़ा) की तुलना और वहाँ से उचित संदर्भ का प्रयोग करेंगे:

  • आवेदन: getApplicationContext()

  • गतिविधि: इस (के रूप में गतिविधि फैली प्रसंग)

  • टुकड़ा: getActivity()