I am a student and first time studying android and trying to make a quiz app using SQLite it works properly on emulator but crashes on android mobile
I am not able to understand the problem whenever I am trying to install the quiz by copying its .apk it gets installed on android phone but whenever I click on the button to show questions it crashes
This is my db helper class.
package com.example.quiz;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;
public class dbhelper extends SQLiteOpenHelper {
private final static String DATABASE_NAME="questio.db";
private final static int DATABASE_VERSION=2;
private final static String Android="quiz1";
private final static String php="quiz2";
private final static String ID="id";
private final static String score="score";
private final static String Question="question";
private final static String answer="ans";
private final static String op1="opa";
private final static String op2="opb";
private final static String op3="opc";
public static final String SQL_Create="create table " +Android+"("+ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+Question+" TEXT NOT NULL, "+answer+" TEXT,"+op1+" TEXT, "+op2+" TEXT, "+op3+" TEXT"+")";
public static final String SQL_Create2="create table " +php+"("+ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+Question+" TEXT NOT NULL, "+answer+" TEXT,"+op1+" TEXT, "+op2+" TEXT, "+op3+" TEXT"+")";
SQLiteDatabase db1;
public dbhelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_Create);
db.execSQL(SQL_Create2);
db1=db;
db.close();
// TODO Auto-generated method stub
}
All statements of onUpgrade method are commented so that the questions inserted in the table is not lost.
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//db.execSQL("drop table if exists"+Android);
//db.execSQL("drop table "+php);
//db.execSQL("drop table if exist"+TableName);
//onCreate(db);
// TODO Auto-generated method stubS
}
public void insertIntoTable(String str1,String str2,String str3,String str5,String str4)
{
db1=getWritableDatabase();
ContentValues values=new ContentValues();
values.put(Question, str1);
values.put(answer, str2);
values.put(op1, str3);
values.put(op2, str5);
values.put(op3, str4);
db1.insert(Android, null, values);
}
public void insertIntoTable2(String str1,String str2,String str3,String str4,String str5)
{
SQLiteDatabase db=getWritableDatabase();
ContentValues values=new ContentValues();
values.put(Question, str1);
values.put(answer, str2);
values.put(op1, str3);
values.put(op2, str5);
values.put(op3, str4);
db1.insert(php, null, values);
}
public List<Question> getAllQuestions() {
List<Question> quesList = new ArrayList<Question>();
// Select All Query
String selectQuery = "SELECT * FROM " +Android;
//String del="delete from "+Android+ " where ID=16";
SQLiteDatabase db2=this.getReadableDatabase();
//db2.execSQL(del);
Log.d("chk", selectQuery);
Cursor cursor = db2.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
Question quest = new Question();
quest.setID(cursor.getInt(0));
quest.setQUESTION(cursor.getString(1));
Log.d("quest", quest.getQUESTION());
quest.setANSWER(cursor.getString(2));
quest.setOPTA(cursor.getString(3));
quest.setOPTB(cursor.getString(5));
quest.setOPTC(cursor.getString(4));
quesList.add(quest);
} while (cursor.moveToNext());
}
// return quest list
return quesList;
}
public int rowcount()
{
int row=0;
String selectQuery = "SELECT * FROM " + Android;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
row=cursor.getCount();
return row;
}
}