如何使用异步任务执行数据库操作 [英] How to perform database operations using Async Task

查看:424
本文介绍了如何使用异步任务执行数据库操作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的申请得到,而google搜索,我使用的AsyncTask使主线程不会被阻塞的解决方案有人建议后,执行数据库操作卡住了。

My application is getting stuck while performing database operation after googling for solutions it was suggested that I use AsyncTask so that main thread doesn't get blocked.

我已经创建了独立的类和扩展SQLiteOpenHelper实施OnCreate中和OnUpgrade的方法。但实施的AsyncTask我需要延长AsyncTask的。现在,我在这里的问题是,我已经扩展一个类,我不能扩展另一个类相同的类。

I have created seperate class and extended SQLiteOpenHelper and implemented "OnCreate" and "OnUpgrade" method. But to implement AsyncTask I need to extend "AsyncTask". Now my issue here is that I have already extended one class and I can't extend another class for the same class.

我的code是这样的。

My code is something like this.

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执行数据库操作。

Can anyone suggest how I can perform database operations with SQLiteOpenHelper within an AsyncTask.

谢谢 湿婆

推荐答案

在你的 Actvity 添加以下code,做了必要的修改,

In your Actvity add the following code, do the required changes,

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

执行这个新GetContacts()执行((对象[])NULL);

这篇关于如何使用异步任务执行数据库操作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆