lundi 26 janvier 2015

Database IllegalStateException

I'm stuck at this point where I'm trying to get data from sqlite database. It's crashing cause it is saying my db is null. Its showing problem in returnData() method.


AddActivity class public class AddActivity extends ActionBarActivity {



String getName, getDetails;

// content view
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
}

public void load(View view) {
DataHandler dataHandler = new DataHandler(this);
dataHandler.open();
Cursor c = dataHandler.returnData();
if (c.moveToFirst()) {
do {
getName = c.getString(0);
getDetails = c.getString(1);
} while (c.moveToNext());
Toast.makeText(
getBaseContext(),
"Activity Name:" + getName + "Activity Details"
+ getDetails, Toast.LENGTH_LONG).show();
}
}

// Getting Input of new Activity
public void done(View view) {
int prodIndi;
EditText input = (EditText) findViewById(R.id.editText1);
EditText input2 = (EditText) findViewById(R.id.editText2);
CheckBox check1 = (CheckBox) findViewById(R.id.checkBox1);
CheckBox check2 = (CheckBox) findViewById(R.id.checkBox2);
CheckBox check3 = (CheckBox) findViewById(R.id.checkBox3);
TextView test = (TextView) findViewById(R.id.test);

if (check1.isChecked() && !check2.isChecked() && !check3.isChecked()
&& !input.equals("") && !input2.equals("")) {
prodIndi = 1;
} else if (check2.isChecked() && !check1.isChecked()
&& !check3.isChecked() && !input.equals("")
&& !input2.equals("")) {
prodIndi = 2;
} else if (check3.isChecked() && !check1.isChecked()
&& !check2.isChecked() && !input.equals("")
&& !input2.equals("")) {
prodIndi = 3;
} else {
test.setText("Please check one option.");
prodIndi = 0;
}
if (prodIndi != 0) {
getName = input.getText().toString();
getDetails = input2.getText().toString();

DataHandler dataHandler = new DataHandler(getBaseContext());
System.out.println("Database handler created ........");
dataHandler.insertData(getName, getDetails);
Toast.makeText(getBaseContext(), "Data Inserted", Toast.LENGTH_LONG)
.show();

}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.add, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}


}


DataHandler class



public class DataHandler {

public static final String AcNAME = "acname";
public static final String AcDETAILS = "acdetails";
public static final String TABLE_NAME = "mytable";
public static final String DATABASE_NAME = "mydatabase";
public static final int DATABASE_VERSION = 1;
public static final String TABLE_CREATE="create table mytable (acname text not null, acdetails text not null)";
Context ctx;

// ////////////////////////DATABASEHELPER
public static class DatabaseHelper extends SQLiteOpenHelper {

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

@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
try {
db.execSQL(TABLE_CREATE);
} catch (Exception e) {
e.printStackTrace();
}
}

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

}

SQLiteDatabase db;
DatabaseHelper dbhelper;

// ////////////////DATAHANDLER CONSTRUCTOR
public DataHandler(Context ctx) {
this.ctx = ctx;
dbhelper = new DatabaseHelper(ctx);
}

// ////////////////DATAHANDLER METHODS
public DataHandler open() {

db = dbhelper.getWritableDatabase();
return this;
}

public void close() {
dbhelper.close();
}

public void insertData(String acname, String acdetails) {
ContentValues content = new ContentValues();
content.put(AcNAME, acname);
content.put(AcDETAILS, acdetails);
}

public Cursor returnData() {
return db.query(TABLE_NAME, new String[] { AcNAME, AcDETAILS }, null,
null, null, null, null);
}


}


Here's my LOGCAT



01-26 15:02:30.584: E/AndroidRuntime(828): FATAL EXCEPTION: main 01-26 15:02:30.584: E/AndroidRuntime(828): java.lang.IllegalStateException: Could not execute method of the activity 01-26 15:02:30.584: E/AndroidRuntime(828): at android.view.View$1.onClick(View.java:2072) 01-26 15:02:30.584: E/AndroidRuntime(828): at android.view.View.performClick(View.java:2408) 01-26 15:02:30.584: E/AndroidRuntime(828): at android.view.View$PerformClick.run(View.java:8816) 01-26 15:02:30.584: E/AndroidRuntime(828): at android.os.Handler.handleCallback(Handler.java:587) 01-26 15:02:30.584: E/AndroidRuntime(828): at android.os.Handler.dispatchMessage(Handler.java:92) 01-26 15:02:30.584: E/AndroidRuntime(828): at android.os.Looper.loop(Looper.java:123) 01-26 15:02:30.584: E/AndroidRuntime(828): at android.app.ActivityThread.main(ActivityThread.java:4627) 01-26 15:02:30.584: E/AndroidRuntime(828): at java.lang.reflect.Method.invokeNative(Native Method) 01-26 15:02:30.584: E/AndroidRuntime(828): at java.lang.reflect.Method.invoke(Method.java:521) 01-26 15:02:30.584: E/AndroidRuntime(828): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 01-26 15:02:30.584: E/AndroidRuntime(828): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 01-26 15:02:30.584: E/AndroidRuntime(828): at dalvik.system.NativeStart.main(Native Method) 01-26 15:02:30.584: E/AndroidRuntime(828): Caused by: java.lang.reflect.InvocationTargetException 01-26 15:02:30.584: E/AndroidRuntime(828): at com.appquest.prodactivity.AddActivity.load(AddActivity.java:31) 01-26 15:02:30.584: E/AndroidRuntime(828): at java.lang.reflect.Method.invokeNative(Native Method) 01-26 15:02:30.584: E/AndroidRuntime(828): at java.lang.reflect.Method.invoke(Method.java:521) 01-26 15:02:30.584: E/AndroidRuntime(828): at android.view.View$1.onClick(View.java:2067) 01-26 15:02:30.584: E/AndroidRuntime(828): ... 11 more 01-26 15:02:30.584: E/AndroidRuntime(828): Caused by: android.database.sqlite.SQLiteException: no such table: mytable: , while compiling: SELECT acname, acdetails FROM mytable 01-26 15:02:30.584: E/AndroidRuntime(828): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method) 01-26 15:02:30.584: E/AndroidRuntime(828): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91) 01-26 15:02:30.584: E/AndroidRuntime(828): at android.database.sqlite.SQLiteCompiledSql.(SQLiteCompiledSql.java:64) 01-26 15:02:30.584: E/AndroidRuntime(828): at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:80) 01-26 15:02:30.584: E/AndroidRuntime(828): at android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:46) 01-26 15:02:30.584: E/AndroidRuntime(828): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42) 01-26 15:02:30.584: E/AndroidRuntime(828): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345) 01-26 15:02:30.584: E/AndroidRuntime(828): at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1229) 01-26 15:02:30.584: E/AndroidRuntime(828): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1184) 01-26 15:02:30.584: E/AndroidRuntime(828): at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1264) 01-26 15:02:30.584: E/AndroidRuntime(828): at com.appquest.prodactivity.DataHandler.returnData(DataHandler.java:79) 01-26 15:02:30.584: E/AndroidRuntime(828): ... 15 more



Aucun commentaire:

Enregistrer un commentaire