7

मैं अपने डीबी तक पहुंचने के लिए अपनी गतिविधि कक्षा का उपयोग कर रहा हूं जिसने कभी-कभी मेरा प्रोग्राम फ्रीज किया है।AsyncTask से SQLite DB का उपयोग कैसे करें?

तो मैंने डीबी को संभालने के बजाय AsyncTask का उपयोग करने का निर्णय लिया।

मेरे समस्या मैं AsyncTask की क्लास से मेरी SQLite DB "TheDB" का दृष्टांत के लिए कैसे

public class myClass extends AsyncTask<Void, Void, Void>{ 
private TheDB db; 

any method() { 
    this.db = new TheDB(this); //<-- Error here 
} 

इस गतिविधि वर्ग पर ठीक काम किया पता नहीं है, लेकिन यह मैं जानता हूँ कि यह यहां कैसे उपयोग करने के लिए

डीडीबी का कन्स्ट्रक्टर डीडीबी (संदर्भ संदर्भ) है लेकिन यह वर्ग "संदर्भ" नहीं है, तो मैं यहां अपने डीबी का उपयोग कैसे कर सकता हूं?

उदाहरण दें यदि आप

और देना नहीं है कृपया कर सकते हैं मुझे गूगल के संदर्भ के लिंक, एक नौसिखिया हूँ और मैं उन्हें कठिन

उत्तर

9

आप आवेदन संदर्भ यहाँ

this.db = new TheDB(getApplicationContext()); 
पास करनी होगी
+0

हाय ब्रोथा, मैंने कोशिश की लेकिन यह कहता है "विधि getAplicationContext() myClass टाइप के लिए अपरिभाषित है", कोई सुझाव!?! – ZiGi

+3

आपको अपनी गतिविधि के अंदर असींक कार्य को आंतरिक कक्षा के रूप में तुरंत चालू करने की आवश्यकता है। –

+0

वह है! एक आकर्षण की तरह काम करता है, धन्यवाद ढेर भाई! – ZiGi

-1

कार्यक्रम के लिए सीखने का एक महत्वपूर्ण भाग को पढ़ने के लिए सीख रहा है पालन करने के लिए लगता है और दस्तावेज समझते हैं। जैसे-जैसे प्रलेखन जाता है, एंड्रॉइड दस्तावेज़ बहुत विस्तृत होते हैं, इसलिए यह समझने के लिए वास्तव में आपके समय के लायक है कि वे कैसे काम करते हैं।

आप AsyncTask docs में देख सकते हैं, वहाँ एक AsyncTask में कोई onCreate या onExecute तरीका है।

डॉक्स स्पष्ट रूप से एक AsyncTask, onPreExecute(), doInBackground(Params...), onProgressUpdate(Progress...), onPostExecute(Result) के 4 मुख्य कार्य बताते हैं।

आपके उदाहरण के लिए संभावित विकल्प onPreExecute() या doInBackground(Params...) हैं। अंतर यह है कि क्या आप UI थ्रेड पर प्रारंभिकरण करना चाहते हैं या नहीं। यदि आप नहीं करते हैं, तो इसे doInBackground(Params...) में करें।

+0

हाय brotha, धन्यवाद त्वरित उत्तर के लिए, मैं इन स्वचालित रूप से लागू किया "ग्रहण आईडीई का उपयोग कर" लेकिन अभी भी जहाँ भी मैं लाइन का उपयोग करें "this.db = नए TheDB (this);" हालांकि, "यह" एक संदर्भ उत्तर नहीं है इसलिए डीबी को तुरंत चालू करने के लिए उपयोग नहीं किया जा सकता है। तो इस वर्ग से डीबी का उपयोग कैसे करें? अगर – ZiGi

+0

का एक अलग तरीका है तो धूमकेतु के रूप में, आप गतिविधि के संदर्भ तक पहुंच प्राप्त करने के लिए अपनी गतिविधि के भीतर एक आंतरिक कक्षा का उपयोग कर सकते हैं। –

6
import android.content.Context; 

public class SuperTask extends AsyncTask<Void, Void, Void> { 
    private final Context mContext; 

    public SuperTask(Context context) { 
     super(); 
     this.mContext = context 
    } 

    protected Void doInBackground(Void... params) { 
     // using this.mContext 
    } 
} 

public class MainActivity extends Activity { 
    // and run from Activity 
    public void onButtonClick(View view) { 
     new SuperTask(this.getApplicationContext()).execute(); 
    } 
} 
0

इन दो तरीकों मैं देख रहे हैं:

  1. अपने AsyncTask निर्माता के लिए एक संदर्भ वस्तु दर्रा, तो जैसे डेटाबेस का दृष्टांत यह this.db = नया TheDB (संदर्भ);

  2. या आप शायद निर्माता को वास्तविक डेटाबेस ऑब्जेक्ट पास कर सकते हैं, लेकिन पहला दृष्टिकोण बेहतर लगता है।

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