lundi 9 novembre 2015

Android App crashing using getWritableDatabase

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