База данных SQLite заблокирована; getDatabaseLocked()

Цель состоит в том, чтобы извлечь названия парковок из столбцов таблиц парковок "CPNAME" и поместить эти строки имен в массив классов другого класса, который будет отображать счетчик. Если честно, я даже не уверен, покажет ли этот путь строки в блесне...

Проблема на данный момент заключается в том, что когда я вхожу в действие, где спиннер обращается к массиву, который вызывает getCpnames(). Я действительно не могу понять, какая часть моего кода выполняет другие вызовы базы данных, чтобы заблокировать ее, кроме getCpnames(). Заранее спасибо за помощь, я довольно новичок в программировании.

Сообщения об ошибках:

Caused by: java.lang.NullPointerException
at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:256)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224)
atandroid.database.sqlite.SQLiteOpenHelper.getWritableDatabase
(SQLiteOpenHelper.java:164)
at com.example.parkangel.DbHelper.getCpnames(DbHelper.java:74)
at com.example.parkangel.BookTicket.<init>(BookTicket.java:19)

*Код класса моей базы данных: *

package com.example.parkangel;

import java.util.ArrayList;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DbHelper extends SQLiteOpenHelper
{
private DbHelper dbHelper;
private Context ourContext;
private static DbHelper instance;
private SQLiteDatabase ourDatabase;

private static final String DATABASE_NAME = "CPDB.db";
private static final String DATABASE_TABLE = "CPTable";
private static final int DATABASE_VERSION = 1;

public static final String KEY_ID = "_id";
public static final String KEY_CPNAME = "cpname";
public static final String KEY_COST = "cost";

    public DbHelper(Context context)
    {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        // TODO Auto-generated constructor stub 
    }

    public static DbHelper getInstance(Context context)
    {
        if (instance == null)
        {
            instance = new DbHelper(context);   
        }
        return instance;
    }

    @Override
    public void onCreate(SQLiteDatabase db) 
    {
        // TODO Auto-generated method stub
        db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" +
                KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
                KEY_CPNAME + " TEXT NOT NULL, " + KEY_COST + " TEXT 
                                    NOT NULL);");

        db.execSQL("INSERT INTO " + DATABASE_TABLE + " Values ('1','Learning 
                    Resource Center','2');");
        db.execSQL("INSERT INTO " + DATABASE_TABLE + " Values ('2','Park and 
                    Ride','1');");
        db.execSQL("INSERT INTO " + DATABASE_TABLE + " Values ('3','de 
                    Havilland Campus','2');");
        db.execSQL("INSERT INTO " + DATABASE_TABLE + " Values ('4','Multi 
                    Storey Building','2');");
        db.execSQL("INSERT INTO " + DATABASE_TABLE + " Values 
                    ('5','Reception','2');");   
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    {
        // TODO Auto-generated method stub
        db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
        onCreate(db);
    }

    public synchronized DbHelper open() throws SQLException
    {
        System.out.println ("running open");
        if(ourDatabase == null || !ourDatabase.isOpen())
        ourDatabase = getWritableDatabase();
        return this;
    }   

    public String[] getCpnames()
    {
        if(ourDatabase == null || !ourDatabase.isOpen())
        ourDatabase = getWritableDatabase();
        String[] columns = new String[] {KEY_ID, KEY_CPNAME, KEY_COST};
        Cursor  c = ourDatabase.query(DATABASE_TABLE, columns, KEY_CPNAME,     
                    null, null, null, null);
        ArrayList<String> list = new ArrayList<String>();

        if (c != null)
        {
            c.moveToFirst();
            do
            {
                list.add(c.getString(0));
            }           
            while (c.moveToNext());
        }
        if (ourDatabase == null) System.out.println ("is null");

        return list.toArray(new String[]{});
    }   
}

Это класс активности, в котором araylist будет хранить строки, полученные из строк:

package com.example.parkangel;

import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

public class BookTicket extends Activity implements OnClickListener{

Spinner spinner, spinner2;
String[] carParks = DbHelper.getInstance(this).getCpnames();

0 ответов

Другие вопросы по тегам