android - 如何使用异步任务执行数据库操作

标签 android sqlite android-asynctask

在谷歌搜索解决方案后,我的应用程序在执行数据库操作时卡住了,建议我使用 AsyncTask,这样主线程就不会被阻塞。

我创建了单独的类并扩展了 SQLiteOpenHelper 并实现了“OnCreate”和“OnUpgrade”方法。但要实现 AsyncTask,我需要扩展“AsyncTask”。现在我的问题是我已经扩展了一个类,我不能为同一个类扩展另一个类。

我的代码是这样的。

import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;

import com.example.project.R;

public class Database  extends SQLiteOpenHelper{

    static final String dbname="Project";
    static final int dbversion=1;

    TableA r=new TableA();


    SQLiteDatabase db;
    private Context Context;
    public Database(Context context) {
        super(context,  dbname, null, dbversion);
        try{
        db=getWritableDatabase();
        // TODO Auto-generated constructor stub
        if (db.isOpen()){

            System.out.println("Database is opened");
        }
            else{


                System.out.println("Database is not opened");
            }

        }
        catch(Exception e){

            Log.e(dbname, e.getMessage());

        }
    }


    @Override
    public void onCreate(SQLiteDatabase db) {

        // TODO Auto-generated method stub
        try{
        db.beginTransaction();

        db.execSQL(r.r_Table);


        db.insert(r.Tablename, null, r.insertdata());
        db.setTransactionSuccessful();
        retrivedata();
        }
        catch(Exception e){

            android.util.Log.e(r.Tablename, e.getMessage());

        }

        finally{

            db.endTransaction();
        }


    }//

谁能建议我如何在 AsyncTask 中使用 SQLiteOpenHelper 执行数据库操作。

谢谢 湿婆

最佳答案

在你的Actvity中添加如下代码,做需要的修改,

private class GetContacts extends AsyncTask<Object, Object, Cursor> {
    DatabaseConnector dbConnector = new DatabaseConnector(
            getApplicationContext());

    @Override
    protected Cursor doInBackground(Object... params) {
        dbConnector.open();
        if (dbConnector.getAllValues() != null) {
            return dbConnector.getAllValues();
        } else
            return null;
    }

    @Override
    protected void onPostExecute(Cursor result) {
        if (result != null) {
            conAdapter.changeCursor(result); // set the adapter's Cursor
            dbConnector.close();
        }
    }
}

通过 new GetContacts().execute((Object[]) null); 执行此操作

关于android - 如何使用异步任务执行数据库操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16293022/

相关文章:

android - 如何在所有测试中轻松地用假货替换生产 Hilt 模块

android - fragment 不与 fragment 管理器相关联

android - 列索引顺序 SQLite 创建表

android - GPS 在异步任务中不工作

android - 无法在Android中设置自定义imageview的图像资源

android - Android MediaPlayer无法播放声音

ruby-on-rails - Mac雪豹如何安装sqlite3的ruby接口(interface)?

android - 尝试插入时抛出 SQLiteConstraintException

android - AsyncTask 仍然给出 networkOnMainThreadException

java - 如何在 Android 中有效地管理多个异步任务