Alright so I have been searching this question and I have found a couple of answers that I have tried to no success. I noticed that if I comment out getWritableDatabase the app doesn't crash but it does not complete the operation I want.
I also referenced this video to help me create the classes
Here is my SQLHelper Class:
package com.example.amasio.testapplication;
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by Amasio on 11/9/15.
*/
public class DatabaseController extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "Student.db";
public static final String TABLE_NAME = "Student";
public static final String COL_1 = "ID";
public static final String COL_2 = "BANNER ID";
public static final String COL_3 = "FIRST NAME";
public static final String COL_4 = "LAST NAME";
public static final String COL_5 = "GPA";
public static final String COL_6 = "MAJOR";
public DatabaseController(Context context) {
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + "(ID INTEGER AUTOINCREMENT, BANNER ID INTEGER PRIMARY KEY, " +
"FIRST NAME TEXT, LAST NAME TEXT, GPA REAL, MAJOR TEXT);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME);
onCreate(db);
}
public boolean insertStudent(int bannerId, String firstName, String lastName, double gpa, String major){
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(COL_2, bannerId);
cv.put(COL_3, firstName);
cv.put(COL_4, lastName);
cv.put(COL_5, gpa);
cv.put(COL_6, major);
long result = db.insert(TABLE_NAME, null, cv);
db.close();
if(result == -1){
return false;
} else{
return true;
}
}
}
Here is the Activity:
package com.example.amasio.testapplication;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
public class SignupActivity extends AppCompatActivity {
DatabaseController studentDb;
Student s;
EditText bannerIdText;
EditText firstNameText;
EditText lastNameText;
//add email EditText
EditText gpaText;
Spinner majorSpinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signup);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
toolbar.setTitle("Sign Up");
setSupportActionBar(toolbar);
bannerIdText = (EditText) findViewById(R.id.bannerId);
firstNameText = (EditText) findViewById(R.id.firstName);
lastNameText = (EditText) findViewById(R.id.lastName);
gpaText = (EditText) findViewById(R.id.gpa);
majorSpinner = (Spinner) findViewById(R.id.major);
// Create an ArrayAdapter using the string array and a default spinner layout
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.college_majors, android.R.layout.simple_spinner_item);
// Specify the layout to use when the list of choices appears
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner
majorSpinner.setAdapter(adapter);
}
public void onRegisterClicked(View v){
int banner = Integer.parseInt(bannerIdText.getText().toString());
double gpa = Double.parseDouble(gpaText.getText().toString());
String majorValue = majorSpinner.getSelectedItem().toString();
studentDb = new DatabaseController(this);
boolean inserted = studentDb.insertStudent(banner, firstNameText.getText().toString(),
lastNameText.getText().toString(), gpa, majorValue);
if(inserted){
Toast.makeText(SignupActivity.this, "Data Inserted", Toast.LENGTH_LONG ).show();
}else {
Toast.makeText(SignupActivity.this, "Data not Inserted", Toast.LENGTH_LONG).show();
}
}
}
Here is the Log:
11-10 00:24:56.781 21455-21455/? E/SQLiteLog: (1) near "AUTOINCREMENT": syntax error
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: FATAL EXCEPTION: main
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: Process: com.example.amasio.testapplication, PID: 21455
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: java.lang.IllegalStateException: Could not execute method of the activity
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.view.View$1.onClick(View.java:4298)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.view.View.performClick(View.java:5254)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.view.View$PerformClick.run(View.java:21179)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.os.Looper.loop(Looper.java:145)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6837)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: Caused by: java.lang.reflect.InvocationTargetException
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.view.View$1.onClick(View.java:4293)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.view.View.performClick(View.java:5254)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.view.View$PerformClick.run(View.java:21179)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:739)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.os.Looper.loop(Looper.java:145)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6837)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: Caused by: android.database.sqlite.SQLiteException: near "AUTOINCREMENT": syntax error (code 1): , while compiling: CREATE TABLE Student(ID INTEGER AUTOINCREMENT, BANNER ID INTEGER PRIMARY KEY, FIRST NAME TEXT, LAST NAME TEXT, GPA REAL, MAJOR TEXT);
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: #################################################################
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: Error Code : 1 (SQLITE_ERROR)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: Caused By : SQL(query) error or missing database.
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: (near "AUTOINCREMENT": syntax error (code 1): , while compiling: CREATE TABLE Student(ID INTEGER AUTOINCREMENT, BANNER ID INTEGER PRIMARY KEY, FIRST NAME TEXT, LAST NAME TEXT, GPA REAL, MAJOR TEXT);)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: #################################################################
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1093)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:670)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1812)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1743)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at com.example.amasio.testapplication.DatabaseController.onCreate(DatabaseController.java:29)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at com.example.amasio.testapplication.DatabaseController.insertStudent(DatabaseController.java:43)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: at com.example.amasio.testapplication.SignupActivity.onRegisterClicked(SignupActivity.java:60)
11-10 00:24:56.791 21455-21455/? E/AndroidRuntime: ... 13 more
11-10 00:24:56.811 3698-21618/? E/android.os.Debug: ro.product_ship = true
11-10 00:24:56.811 3698-21618/? E/android.os.Debug: ro.debug_level = 0x4f4c
11-10 00:24:59.691 3698-3768/? E/ViewRootImpl: sendUserActionEvent() mView == null
11-10 00:24:59.691 3698-4044/? E/OpenGLRenderer: SFEffectCache:clear(), mSize = 0
11-10 00:24:59.691 3698-4044/? E/libEGL: ------------------------------------------------
11-10 00:24:59.691 3698-4044/? E/libEGL: HWUI Context(1489441920) Damaged Report-Shader
11-10 00:24:59.691 3698-4044/? E/libEGL: HWUI Shaders(2):
11-10 00:24:59.691 3698-4044/? E/libEGL: HWUI Unit 0) Handle(13)
11-10 00:24:59.691 3698-4044/? E/libEGL: HWUI Unit 1) DAMAGED Handle(15)
11-10 00:24:59.691 3698-4044/? E/libEGL: ------------------------------------------------
11-10 00:24:59.691 3698-4044/? E/libGLESv2: HWUI Protection: wrong calling from app context F:ES2-glDeleteShader, handle(15)
11-10 00:24:59.691 3698-4044/? E/libEGL: ------------------------------------------------
11-10 00:24:59.691 3698-4044/? E/libEGL: HWUI Context(1489441920) Damaged Report-Shader
11-10 00:24:59.691 3698-4044/? E/libEGL: HWUI Shaders(2):
11-10 00:24:59.691 3698-4044/? E/libEGL: HWUI Unit 0) DAMAGED Handle(13)
11-10 00:24:59.691 3698-4044/? E/libEGL: HWUI Unit 1) Handle(15)
11-10 00:24:59.691 3698-4044/? E/libEGL: ------------------------------------------------
11-10 00:24:59.691 3698-4044/? E/libGLESv2: HWUI Protection: wrong calling from app context F:ES2-glDeleteShader, handle(13)
11-10 00:24:59.841 3698-4477/? E/ActivityManager: checkUser: useridlist=null, currentuser=0
11-10 00:24:59.841 3698-4477/? E/ActivityManager: checkUser: useridlist=null, currentuser=0
11-10 00:24:59.841 3698-4477/? E/ActivityManager: checkUser: useridlist=null, currentuser=0
11-10 00:24:59.841 3698-4477/? E/ActivityManager: checkUser: useridlist=null, currentuser=0
11-10 00:24:59.861 21623-21623/? E/Zygote: MountEmulatedStorage()
11-10 00:24:59.861 21623-21623/? E/Zygote: v2
11-10 00:24:59.861 21623-21623/? E/SELinux: [DEBUG] get_category: variable seinfo: default sensitivity: NULL, cateogry: NULL
11-10 00:24:59.971 3698-3766/? E/Sensors: AccSensor : Meta event
00-00 00:00:00.0 0-0/? E/Internal: device '03157df381aab219' not found
Aucun commentaire:
Enregistrer un commentaire