2012-03-24 4 views
0

Я использую следующий метод для открытия моего SQLite db.Ошибка при открытии базы данных SQLite

private void open() { 
    database = dbHelper.getReadableDatabase(); 
} 

Он является неотъемлемой частью dbHelper.

public void onCreate(SQLiteDatabase la_db) { 
    String s; 
    try { 
     InputStream in = context.getResources().openRawResource(R.raw.sql); 
     DocumentBuilder builder = DocumentBuilderFactory.newInstance() 
       .newDocumentBuilder(); 
     Document doc = builder.parse(in, null); 
     NodeList statements = doc.getElementsByTagName("statement"); 
     for (int i = 0; i < statements.getLength(); i++) { 
      s = statements.item(i).getChildNodes().item(0).getNodeValue(); 
      la_db.execSQL(s); 
     } 
    } catch (Throwable t) { 
     Toast.makeText(context, t.toString(), 50000).show(); 
    } 
} 

Часть sql.xml

.... 
<statement> 
CREATE TABLE IF NOT EXISTS la_table (
    _id INTEGER PRIMARY KEY AUTOINCREMENT, 
    suggest_text_1 VARCHAR(100), 
    test_value_1 VARCHAR(100), 
    test_value_2 VARCHAR(100), 
    test_type_1 VARCHAR(50), 
    suggest_intent_data VARCHAR(5)) 
</statement> 
<statement>INSERT INTO la_table VALUES(1,"Sodium (Na)","310 - 330 mg/dl",null,"Serum","1")</statement> 
<statement>INSERT INTO la_table VALUES(2,"Potassium (K)","14 - 20 mg/dl","3.5 - 5 mmol/L or mEq/L","Serum","2")</statement> 
..... 

И я получаю эту ошибку:

01-01 00:59:38.725: E/AndroidRuntime(2060): Caused by: java.lang.NullPointerException 
01-01 00:59:38.725: E/AndroidRuntime(2060):  at com.assistant.lab.royale.DataSource.open(DataSource.java:42) 
01-01 00:59:38.725: E/AndroidRuntime(2060):  at com.assistant.lab.royale.DataSource.listViewCursor(DataSource.java:25) 
01-01 00:59:38.725: E/AndroidRuntime(2060):  at com.assistant.lab.royale.LabAssistant.onCreate(LabAssistant.java:24) 
01-01 00:59:38.725: E/AndroidRuntime(2060):  at android.app.Activity.performCreate(Activity.java:4465) 
+0

Отправьте код, в котором вы инициализируете переменную 'dbHelper'. –

+0

@BorisStrandjev Я инициализирую использование 'private DatabaseHelper dbHelper;'. –

+0

Вы не указали нам код, упомянутый в фрейме стека –

ответ

1

Код, который вы предоставили, определенно потерпит неудачу. Вы должны указать контекст в конструкторе dbHelper. Я предлагаю вам изменить свой класс так:

Добавить конструктор:

private DatabaseHelper dbHelper; 
public DataSource(Context context) { 
    this.dbHelper = new DatabaseHelper(context); 
} 

Вы не можете избежать передачи в контексте, но это обычно не является большой проблемой, от каждого Activity вы можете просто передать в this как context. После этого изменения вы сможете без проблем использовать свой dbHelper.

+0

Это работает. –

1

dbHelper является нулевым в вашем open(), вам нужно создать экземпляр, если ваш помощник прежде чем вы сможете его использовать.

+0

Я попытался добавить 'private DatabaseHelper dbHelper = new DatabaseHelper (null);'. Он не работает stiil –

+0

Это все та же ошибка? Теперь должно быть что-то еще. – zapl