I have a simple app where the user enters their details and click the 'save'button which in turn saves the data using SQLite, however when I click the save button then the app crashes saying "unfortunately the app has stoped". I think My SQL statements are correct and I think the error may have something to do with button click method maybe? I ca't really see what I'm doing wrong.
MyDBHandler class
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.Cursor;
import android.content.Context;
import android.content.ContentValues;
public class MyDBHandler extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "detailsDB.db";
public static final String TABLE_DETAILS = "details";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_FIRSTNAME = "firstname";
public static final String COLUMN_SURNAME = "surname";
public static final String COLUMN_PHONE = "phone";
public static final String COLUMN_EMAIL = "email";
public static final String COLUMN_ADDRESS1 = "address1";
public static final String COLUMN_ADDRESS2 = "address2";
// Pass database information along to superclass
public MyDBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, DATABASE_NAME, factory, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String query = " CREATE TABLE " + TABLE_DETAILS + "("
+ COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ COLUMN_FIRSTNAME + " TEXT, "
+ COLUMN_SURNAME + " TEXT, "
+ COLUMN_PHONE + " TEXT, "
+ COLUMN_EMAIL + " TEXT, "
+ COLUMN_ADDRESS1 + " TEXT, "
+ COLUMN_ADDRESS2 + " TEXT "
+ ");";
db.execSQL(query);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(" DROP TABLE IF EXISTS " + TABLE_DETAILS);
onCreate(db);
}
//Add a new row to the database
public void addDetails(Details details){
ContentValues values = new ContentValues();
values.put(COLUMN_FIRSTNAME, details.getFirstname());
values.put(COLUMN_SURNAME, details.getSurname());
values.put(COLUMN_PHONE, details.getPhone());
values.put(COLUMN_EMAIL, details.getEmail());
values.put(COLUMN_ADDRESS1, details.getAddress1());
values.put(COLUMN_ADDRESS2, details.getAddress2());
SQLiteDatabase db = getWritableDatabase();
db.insert(TABLE_DETAILS, null, values);
db.close();
}
}
Details class
public class Details {
int _id;
String firstname;
String surname;
String phone;
String email;
String address1;
String address2;
// Empty constructor
public Details(String s){
}
public void set_id(int _id) {
this._id = _id;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public void setPhone(String phone) {
this.phone = phone;
}
public void setEmail(String email) {
this.email = email;
}
public void setAddress1(String address1) {
this.address1 = address1;
}
public void setAddress2(String address2) {
this.address2 = address2;
}
public int get_id() {
return _id;
}
public String getFirstname() {
return firstname;
}
public String getSurname() {
return surname;
}
public String getPhone() {
return phone;
}
public String getEmail() {
return email;
}
public String getAddress1() {
return address1;
}
public String getAddress2() {
return address2;
}
}
MainActivity class
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends ActionBarActivity {
TextView firstName;
EditText editTextName;
TextView textView5;
EditText editTextSurname;
TextView textView4;
EditText editTextMobile;
TextView textView2;
EditText editTextEmail;
TextView textView3;
EditText editTextAddress1;
TextView textView6;
EditText editTextAddress2;
MyDBHandler dbHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
firstName = (TextView) findViewById(R.id.firstName);
editTextName = (EditText) findViewById(R.id.editTextName);
textView5 = (TextView) findViewById(R.id.textView5);
editTextSurname = (EditText) findViewById(R.id.editTextSurname);
textView4 = (TextView) findViewById(R.id.textView4);
editTextMobile = (EditText) findViewById(R.id.editTextMobile);
textView2 = (TextView) findViewById(R.id.textView2);
editTextEmail = (EditText) findViewById(R.id.editTextEmail);
textView3 = (TextView) findViewById(R.id.textView3);
editTextAddress1 = (EditText) findViewById(R.id.editTextAddress1);
textView6 = (TextView) findViewById(R.id.textView6);
editTextAddress2 = (EditText) findViewById(R.id.editTextAddress2);
dbHandler = new MyDBHandler(this, null, null, 1);
//printDatabase();
}
//Add details to the database
public void addButtonClicked(View view){
Details details = new Details("");
details.setFirstname(editTextName.getText().toString());
details.setSurname(editTextSurname.getText().toString());
details.setPhone(editTextMobile.getText().toString());
details.setEmail(editTextEmail.getText().toString());
details.setAddress1(editTextAddress1.getText().toString());
details.setAddress2(editTextAddress2.getText().toString());
dbHandler.addDetails(details);
//printDatabase();
}
}
ActivityMain xml
<ScrollView xmlns:android="http://ift.tt/nIICcg"
xmlns:tools="http://ift.tt/LrGmb4"
android:id="@+id/scrollView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".MainActivity" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="600dp"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:theme="@style/AppTheme"
android:touchscreenBlocksFocus="false">
<!-- First name -->
<TextView
android:id="@+id/firstName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/editTextName"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:text="@string/firstname"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/editTextName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="5dp"
android:layout_marginStart="82dp"
android:layout_marginLeft="90dp"
android:ems="10"
android:paddingTop="25dp"
android:inputType="text" >
</EditText>
<!-- Surname -->
<TextView
android:id="@+id/textView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/address2"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_marginTop="33dp"
android:layout_below="@+id/editTextAddress1"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<EditText
android:id="@+id/editTextAddress2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="text"
android:layout_alignTop="@+id/textView6"
android:layout_alignLeft="@+id/editTextAddress1"
android:layout_alignStart="@+id/editTextAddress1" />
<!-- Mobile Number -->
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/editTextSurname"
android:layout_alignLeft="@+id/firstName"
android:layout_alignStart="@+id/firstName"
android:text="@string/surname"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/editTextSurname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/editTextMobile"
android:layout_alignStart="@+id/editTextMobile"
android:layout_below="@+id/editTextName"
android:layout_marginTop="22dp"
android:ems="10"
android:inputType="text" />
<!-- Email Address -->
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/editTextEmail"
android:layout_alignLeft="@+id/firstName"
android:layout_alignStart="@+id/firstName"
android:text="@string/email"
android:textAppearance="?android:attr/textAppearanceMedium"
android:inputType="textEmailAddress" />
<EditText
android:id="@+id/editTextEmail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignStart="@+id/editTextMobile"
android:layout_alignLeft="@+id/editTextMobile"
android:layout_below="@+id/editTextMobile"
android:layout_marginTop="22dp"
android:ems="10"
android:inputType="textEmailAddress" />
<!-- Address 1 -->
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/editTextAddress1"
android:layout_alignBottom="@+id/editTextAddress1"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/editTextEmail"
android:text="@string/address1"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/editTextAddress1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/editTextName"
android:layout_alignEnd="@+id/editTextName"
android:layout_below="@+id/editTextEmail"
android:layout_marginTop="30dp"
android:ems="10"
android:inputType="text" />
<!-- Address 2 -->
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/editTextEmail"
android:layout_alignLeft="@+id/textView5"
android:layout_alignStart="@+id/textView5"
android:text="@string/phone"
android:textAppearance="?android:attr/textAppearanceMedium" />
<EditText
android:id="@+id/editTextMobile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/editTextName"
android:layout_alignStart="@+id/editTextName"
android:layout_below="@+id/editTextSurname"
android:layout_marginTop="22dp"
android:ems="10"
android:inputType="phone">
</EditText>
<Button
android:id="@+id/addButtonClicked"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="run"
android:text="@string/save"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
</ScrollView>
Aucun commentaire:
Enregistrer un commentaire