如何解决SQLiteOpenHelper.getDatabaseLocked错误试图访问一个SQLite数据库中的android? [英] How can i fix SQLiteOpenHelper.getDatabaseLocked error while trying to access a SQLite database in android?

查看:527
本文介绍了如何解决SQLiteOpenHelper.getDatabaseLocked错误试图访问一个SQLite数据库中的android?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从SQLite数据库检索一些数据。但是,当我尝试使用方法getTaskSent检索数据,我得到了以下错误。任何人都可以给我建议以下错误的解决方案?

  E / AndroidRuntime(23159):在android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
 

下面是我的数据库code:

 公共类数据库处理器扩展SQLiteOpenHelper {
私有静态最后弦乐的logcat = NULL;

公共数据库处理器(背景下的ApplicationContext){
    超(ApplicationContext中,androidsqlite.db,空,4);
    // TODO自动生成构造函数存根
    Log.d(logcat中,数据库创建);

}
@覆盖
公共无效的onCreate(SQLiteDatabase DB){
    // TODO自动生成方法存根
    查询字符串,QUERY1,query2;
    查询=CREATE TABLE用户登陆(phoneId INTEGER PRIMARY KEY,用户名文本,用户ID INTEGER,联系人TEXT唯一的);
 QUERY1 =CREATE TABLE任务(任务id INTEGER PRIMARY KEY,标题文本,说明文本,文本D1,D2文本,文本T1,T2文本,接收文本,发送文本);
 query2 =CREATE TABLE我(fbId INTEGER PRIMARY KEY,fbname TEXT,fbuserid INTEGER,fbpic BLOB,pH值文本,电子邮件文本);
 db.execSQL(QUERY1);
    db.execSQL(查询);
    db.execSQL(query2);

}
 公共无效inserttask(HashMap的<字符串,字符串> queryValues​​){
    SQLiteDatabase数据库= this.getWritableDatabase();
    ContentValues​​ values​​2 =新ContentValues​​();
    values​​2.put(标题,queryValues​​.get(标题));
    values​​2.put(递减,queryValues​​.get(降序));
    values​​2.put(D1,queryValues​​.get(D1));
    values​​2.put(D2,queryValues​​.get(D2));
    values​​2.put(T1,queryValues​​.get(T1));
    values​​2.put(T2,queryValues​​.get(T2));
    values​​2.put(发件人,queryValues​​.get(发件人));
    values​​2.put(接收器,queryValues​​.get(接收器));

    database.insert(任务,空,values​​2);
    database.close();
}
  公众的ArrayList< HashMap的<字符串,字符串>> getTaskSent(){
    ArrayList的< HashMap的<字符串,字符串>>单词表;
    单词表=新的ArrayList< HashMap的<字符串,字符串>>();
    字符串selectQuery =SELECT * FROM任务;

    SQLiteDatabase数据库= this.getReadableDatabase();
    光标光标= database.rawQuery(selectQuery,NULL);
    如果(cursor.moveToFirst()){
        做 {
            HashMap的<字符串,字符串>图=新的HashMap<字符串,字符串>();
            //map.put("userid,cursor.getString(1));
            map.put(标题,cursor.getString(1));
            map.put(递减,cursor.getString(2));
            map.put(D1,cursor.getString(3));
            map.put(D2,cursor.getString(4));
            map.put(T1,cursor.getString(5));
            map.put(T2,cursor.getString(6));
            map.put(接收机,cursor.getString(7));

            wordList.add(图)
        }而(cursor.moveToNext());
    } cursor.close();
    database.close();


    返回词表;
}
 

解决方案

上下文传递给你的数据库处理器构造函数是

I am trying to retrieve some data from a Sqlite database. But when I try to retrieve data using the method getTaskSent, I get the following errors. Can anyone suggest me a solution for the following errors?

  E/AndroidRuntime(23159):  at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)

Here is my database code:

public class Databasehandler extends SQLiteOpenHelper{
private static final String LOGCAT = null;

public Databasehandler(Context applicationcontext) {
    super(applicationcontext,"androidsqlite.db", null, 4);
    // TODO Auto-generated constructor stub
    Log.d(LOGCAT,"Database Created");

}
@Override
public void onCreate(SQLiteDatabase db) {
    // TODO Auto-generated method stub
    String query,query1,query2; 
    query = "CREATE TABLE userlogin ( phoneId INTEGER PRIMARY KEY,username TEXT,userid INTEGER,contacts TEXT UNIQUE)";
 query1 = "CREATE TABLE task ( TaskId INTEGER PRIMARY KEY,heading TEXT,desc TEXT,d1 TEXT,d2 TEXT,t1 TEXT,t2 TEXT,receiver TEXT,sender TEXT)";
 query2 = "CREATE TABLE me ( fbId INTEGER PRIMARY KEY,fbname TEXT,fbuserid INTEGER,fbpic BLOB,ph TEXT,email TEXT)"; 
 db.execSQL(query1);
    db.execSQL(query);
    db.execSQL(query2);

}
 public void inserttask(HashMap<String, String> queryValues) {
    SQLiteDatabase database = this.getWritableDatabase();
    ContentValues values2 = new ContentValues();
    values2.put("heading", queryValues.get("heading"));
    values2.put("desc", queryValues.get("desc"));
    values2.put("d1", queryValues.get("d1"));
    values2.put("d2", queryValues.get("d2"));
    values2.put("t1", queryValues.get("t1"));
    values2.put("t2", queryValues.get("t2"));
    values2.put("sender", queryValues.get("sender"));
    values2.put("receiver", queryValues.get("receiver"));

    database.insert("task", null, values2);
    database.close();
}
  public ArrayList<HashMap<String, String>> getTaskSent() {
    ArrayList<HashMap<String, String>> wordList;
    wordList = new ArrayList<HashMap<String, String>>();
    String selectQuery = "SELECT * FROM task";

    SQLiteDatabase database = this.getReadableDatabase();
    Cursor cursor = database.rawQuery(selectQuery, null);
    if (cursor.moveToFirst()) {
        do {
            HashMap<String, String> map = new HashMap<String, String>();
            //map.put("userid", cursor.getString(1));
            map.put("heading", cursor.getString(1));
            map.put("desc", cursor.getString(2));
            map.put("d1", cursor.getString(3));
            map.put("d2", cursor.getString(4));
            map.put("t1", cursor.getString(5));
            map.put("t2", cursor.getString(6)); 
            map.put("receiver", cursor.getString(7));                                                                                                           

            wordList.add(map);
        } while (cursor.moveToNext());
    }cursor.close();
    database.close();


    return wordList;
}

解决方案

The Context you pass to your Databasehandler constructor is null.

这篇关于如何解决SQLiteOpenHelper.getDatabaseLocked错误试图访问一个SQLite数据库中的android?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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