سؤال

لقد كنت أستخدم فئة النشاط الخاصة بي للوصول إلى دي بي التي جعلت برنامجي تجميد في بعض الأحيان.

لذلك قررت استخدام Asynctask بدلاً من ذلك للتعامل مع DB.

مشكلتي هي أنني لا أعرف كيفية إنشاء مثيل لـ SQLite DB "thedb" من فئة Asynctask

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

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

لقد عمل هذا بشكل جيد في فصل النشاط ، لكنني لا أعرف كيفية استخدامه هنا

مُنشئ Thedb هو thedb (سياق السياق) ولكن هذه الفئة ليست "سياقًا" ، فكيف يمكنني استخدام DB هنا؟

يرجى تقديم أمثلة إذا استطعت

ويرجى لا تعطيني روابط إلى مراجع Google ، أنا مبتدئ وأجدهم يصعب متابعتهم

هل كانت مفيدة؟

المحلول

تحتاج إلى تمرير سياق التطبيق هنا

this.db = new TheDB(getApplicationContext());

نصائح أخرى

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(); 
    }
}

هناك طريقتان أراه:

  1. تمرير كائن سياق إلى مُنشئ Asynctask الخاص بك ، ثم قاعدة بيانات مثل هذا. db = new thedb (السياق) ؛

  2. أو ربما يمكنك تمرير كائن قاعدة البيانات الفعلي إلى المُنشئ ، لكن النهج الأول يبدو أفضل.

جزء مهم من تعلم البرنامج هو تعلم قراءة الوثائق وفهمها. كما يقول الوثائق ، فإن مستندات Android مفصلة إلى حد ما ، لذلك يستحق وقتك حقًا لفهم كيفية عملها.

كما ترون في مستندات Asynctask, ، لا يوجد onCreate أو onExecute الطريقة في AsyncTask.

من الواضح أن المستندات تسير بك من خلال الوظائف الرئيسية الأربعة لمسكينات غير متزامنة ، onPreExecute(), doInBackground(Params...), onProgressUpdate(Progress...), onPostExecute(Result).

الخيارات المحتملة لمثيلك هي onPreExecute() أو doInBackground(Params...). الفرق هو ما إذا كنت تريد أن تحدث التهيئة أو لم تكن في موضوع واجهة المستخدم أم لا. إذا لم تقم بذلك ، فقم بذلك doInBackground(Params...).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top