I made myself little app that uses SQLite but I am not able to get it working. I get java.lang.NullPointerException. Here is my LogCat:
07-02 19:18:01.584 18829 18829 E AndroidRuntime FATAL EXCEPTION: main
07-02 19:18:01.584 18829 18829 E AndroidRuntime java.lang.RuntimeException: Unable to start activity ComponentInfo{com.beefcodes.biblequiz/com.beefcodes.biblequiz.GameActivity}: java.lang.NullPointerException
07-02 19:18:01.584 18829 18829 E AndroidRuntime at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2343)
07-02 19:18:01.584 18829 18829 E AndroidRuntime at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)
07-02 19:18:01.584 18829 18829 E AndroidRuntime at android.app.ActivityThread.access$600(ActivityThread.java:162)
07-02 19:18:01.584 18829 18829 E AndroidRuntime at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)
07-02 19:18:01.584 18829 18829 E AndroidRuntime at android.os.Handler.dispatchMessage(Handler.java:107)
07-02 19:18:01.584 18829 18829 E AndroidRuntime at android.os.Looper.loop(Looper.java:194)
07-02 19:18:01.584 18829 18829 E AndroidRuntime at android.app.ActivityThread.main(ActivityThread.java:5371)
07-02 19:18:01.584 18829 18829 E AndroidRuntime at java.lang.reflect.Method.invokeNative(Native Method)
07-02 19:18:01.584 18829 18829 E AndroidRuntime at java.lang.reflect.Method.invoke(Method.java:525)
07-02 19:18:01.584 18829 18829 E AndroidRuntime at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
07-02 19:18:01.584 18829 18829 E AndroidRuntime at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
07-02 19:18:01.584 18829 18829 E AndroidRuntime at dalvik.system.NativeStart.main(Native Method)
07-02 19:18:01.584 18829 18829 E AndroidRuntime Caused by: java.lang.NullPointerException
07-02 19:18:01.584 18829 18829 E AndroidRuntime at com.beefcodes.biblequiz.MyDB.onCreate(MyDB.java:31)
07-02 19:18:01.584 18829 18829 E AndroidRuntime at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
07-02 19:18:01.584 18829 18829 E AndroidRuntime at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
07-02 19:18:01.584 18829 18829 E AndroidRuntime at com.beefcodes.biblequiz.MyDB.<init>(MyDB.java:25)
07-02 19:18:01.584 18829 18829 E AndroidRuntime at com.beefcodes.biblequiz.GameActivity.onCreate(GameActivity.java:22)
07-02 19:18:01.584 18829 18829 E AndroidRuntime at android.app.Activity.performCreate(Activity.java:5122)
07-02 19:18:01.584 18829 18829 E AndroidRuntime at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081)
07-02 19:18:01.584 18829 18829 E AndroidRuntime at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307)
07-02 19:18:01.584 18829 18829 E AndroidRuntime ... 11 more
Here is my Activity class:
package com.beefcodes.biblequiz;
import android.app.*;
import android.os.Bundle;
import java.io.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import android.widget.*;
import android.database.*;
import com.beefcodes.biblequiz.MyDB;
public class GameActivity extends Activity {
public static MyDB DBM;
private Cursor cursor;
public String current_dif = "begginer";
public String current_right;
@Override
protected void onCreate(Bundle b) {
super.onCreate(b);
setContentView(R.layout.game);
DBM = new MyDB(this);
getData();
cursor = DBM.getValuesfromDif(current_dif);
if (DBM == null) {
DBM = new MyDB(this);
}
}
void getData () {
InputStream stream = getResources().openRawResource(R.raw.otazky);
try {
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(stream, null);
NodeList otazky = doc.getElementsByTagName("otazka");
for (int i = 0;i<otazky.getLength();i++) {
String otazka = ((Element)otazky.item(i)).getAttribute("text");
String odpA = ((Element)otazky.item(i)).getAttribute("a");
String odpB = ((Element)otazky.item(i)).getAttribute("b");
String odpC = ((Element)otazky.item(i)).getAttribute("c");
String odpD = ((Element)otazky.item(i)).getAttribute("d");
String obtiznost = ((Element)otazky.item(i)).getAttribute("obtiznost");
String spravne = ((Element)otazky.item(i)).getAttribute("spravne");
DBM.WriteValue(otazka, odpA, odpB, odpC, odpD, obtiznost, spravne);
}
} catch (Exception ex) {
Toast.makeText(this, "Nastala chyba při načítání souboru.", Toast.LENGTH_LONG).show();
}
}
void writeValues (String text, String butA, String butB, String butC, String butD) {
TextView scoretext = (TextView)findViewById(R.id.scoretext);
TextView otazkatext = (TextView)findViewById(R.id.gameTextView);
Button buttA = (Button)findViewById(R.id.gameButtonA);
Button buttB = (Button)findViewById(R.id.gameButtonB);
Button buttC = (Button)findViewById(R.id.gameButtonC);
Button buttD = (Button)findViewById(R.id.gameButtonD);
otazkatext.setText(text);
buttA.setText(butA);
buttB.setText(butB);
buttC.setText(butC);
buttD.setText(butD);
}
public void getValueFromCursor (Cursor c) {
if(c.moveToFirst()) {
String otazka = c.getString(c.getColumnIndex(DBM.Q_TEXT));
String odpA = c.getString(c.getColumnIndex(DBM.Q_A1));
String odpB = c.getString(c.getColumnIndex(DBM.Q_A2));
String odpC = c.getString(c.getColumnIndex(DBM.Q_A3));
String odpD = c.getString(c.getColumnIndex(DBM.Q_A4));
String spravne = c.getString(c.getColumnIndex(DBM.spravne));
writeValues(otazka, odpA, odpB, odpC, odpD);
setCurrentRight(spravne);
}
c.close();
}
public void setCurrentRight (String spravny) {
current_right = spravny;
}
}
Here is my SQLite class:
package com.beefcodes.biblequiz;
import android.database.sqlite.*;
import android.content.*;
import android.database.*;
public class MyDB extends SQLiteOpenHelper {
private SQLiteDatabase db;
private static final String DB_NAME = "dbotazky";
private static final String TABLE_NAME = "otazky";
private static final int DB_VERSION = 10;
public static final String ID = "_id";
public static final String Q_TEXT = "text";
public static final String Q_A1 = "odpa";
public static final String Q_A2 = "odpb";
public static final String Q_A3 = "odpc";
public static final String Q_A4 = "odpd";
public static final String obtiznost = "dif";
public static final String spravne = "true";
private static final String DATABASE_CREATE = "CREATE TABLE " + TABLE_NAME + " ( " + ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + Q_A1 + " TEXT, " + Q_A2 + " TEXT, " + Q_A3 + " TEXT, " + Q_A4 + " TEXT, " + obtiznost + " TEXT, " + spravne + " TEXT);";
private static MyDB DBM = null;
public MyDB getInstance (Context context) {
if (DBM == null) {
DBM = new MyDB(context.getApplicationContext());
}
//db = MyDB.getInstance(context).getWritableDatabase();
return DBM;
}
private MyDB (Context context) {
super(context, DB_NAME, null, DB_VERSION);
db = MyDB.getInstance(context).getWritableDatabase();
}
@Override
public void onCreate(SQLiteDatabase p1)
{
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldv, int newv)
{
db.execSQL("DROP TABLE IF EXIST " + TABLE_NAME);
onCreate(db);
}
public void close() {
db.close();
}
public void WriteValue (String otazka, String aa, String ab, String ac, String ad, String dif, String spravny) {
ContentValues cv = new ContentValues ();
cv.put(Q_TEXT, otazka);
cv.put(Q_A1, aa);
cv.put(Q_A2, ab);
cv.put(Q_A3, ac);
cv.put(Q_A4, ad);
cv.put(obtiznost, dif);
cv.put(spravne, spravny);
db.insert(TABLE_NAME, null, cv);
}
public Cursor getValuesfromDif (String DIF) {
String[] sloupce = {ID, Q_TEXT, Q_A1, Q_A2, Q_A3, Q_A4, obtiznost, spravne};
String where = obtiznost + "=?";
String[] params = {DIF};
String orderby = "RANDOM()";
String limit = "LIMIT 1";
Cursor cursor = db.query(TABLE_NAME, sloupce, where, params, null, null, orderby, limit);
return cursor;
}
}
Thanks for any help.