This question already has an answer here:
I'm trying ti insert a tuple (record) on a sqlite db. it has one integer primary key. but when I try to insert I got an error "null object reference". I searched a lot but unfortunately I can't resolved the error with respect to my case. Would you please give me hand?
here are the codes:
SignUp.Java
package polimi.aap.yas.personalhealthrecord;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.Button;
import android.widget.Toast;
import java.lang.ref.WeakReference;
import android.app.Activity;
import android.os.AsyncTask;
import android.view.View.OnClickListener;
import polimi.aap.yas.personalhealthrecord.db.AccountHolderDAO;
import polimi.aap.yas.personalhealthrecord.to.AccountHolder_to;
import polimi.aap.yas.personalhealthrecord.to.Demographics_to;
public class SignUp extends Fragment implements OnClickListener {
// UI references
EditText et1_email,et2_username,et3_password,et4_password2;
Button btn1_signup,btn2_reset;
private AddAccTask addaccTask;
AccountHolder_to acchold = null;
Demographics_to pat=null;
private AccountHolderDAO accholdDAO;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
accholdDAO = new AccountHolderDAO(getActivity());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.signup, container, false);
findViewsById(rootView);
setListeners();
return rootView;
}
private void setListeners() {
btn1_signup.setOnClickListener(this);
btn2_reset.setOnClickListener(this);
}
protected void resetAllFields() {
et1_email.setText("");
et2_username.setText("");
et3_password.setText("");
et4_password2.setText("");
}
private void setAccountHolder() {
acchold = new AccountHolder_to();
String ea = et1_email.getText().toString();
String un = et2_username.getText().toString();
String pw1 = et3_password.getText().toString();
String pw2 = et4_password2.getText().toString();
String su="";
// Integer ahn=null;
if (ea == null || ea == "" || ea.length() < 10) {
show("Email address is invalid.");}
else if (ea != null && ea != "" && ea.length() >= 10) {
acchold.setA_email(ea);}
if (un == null || un == "" || un.length() < 9) {
show("Username must contain at least 8 letters");}
else if (un != null && un != "" || un.length() >= 9){
acchold.setA_username(un);}
if (pw1 == null || pw1 == "" || pw1.length() < 9 || pw2 == null || pw2 == "" || pw2.length() < 9 || pw2 != pw1) {
show("Password must contain at least 8 letters.");}
else if (pw1 != null && pw1 != "" && pw1.length() >= 9 && pw2 != null && pw2 != "" && pw2.length() >= 9 && pw2 == pw1){
acchold.setA_password(pw1);
}
acchold.setA_syncedURL(su);
//acchold.setA_A_accountNumber(ahn);
acchold.setA_A_patientID(pat);
}
public void show(String str)
{
Toast.makeText(getActivity(), str, Toast.LENGTH_LONG).show();
}
private void findViewsById(View rootView) {
et1_email=(EditText) rootView.findViewById(R.id.txtEmail_signup);
et2_username=(EditText) rootView.findViewById(R.id.txtUsername_signup);
et3_password=(EditText) rootView.findViewById(R.id.txtPassword_Signup);
et4_password2=(EditText) rootView.findViewById(R.id.txtPassword2_signup);
btn1_signup=(Button)rootView.findViewById(R.id.btnRegister_signup);
btn2_reset=(Button)rootView.findViewById(R.id.btnRest_signup);
}
@Override
public void onClick(View view) {
if (view == btn1_signup) {
setAccountHolder();
addaccTask = new AddAccTask(getActivity());
addaccTask.execute((Void) null);
} else if (view == btn2_reset) {
resetAllFields();
}
}
public class AddAccTask extends AsyncTask<Void, Void, Long> {
private final WeakReference<Activity> activityWeakRef;
public AddAccTask(Activity context) {
this.activityWeakRef = new WeakReference<Activity>(context);
}
@Override
protected Long doInBackground(Void... arg0) {
long result = accholdDAO.save(acchold);
return result;
}
@Override
protected void onPostExecute(Long result) {
if (activityWeakRef.get() != null
&& !activityWeakRef.get().isFinishing()) {
if (result != -1)
Toast.makeText(activityWeakRef.get(), "Account Created",
Toast.LENGTH_LONG).show();
}
}
}
}
AccountHolderDAO.java
package polimi.aap.yas.personalhealthrecord.db;
import android.content.ContentValues;
import android.content.Context;
import polimi.aap.yas.personalhealthrecord.to.AccountHolder_to;
import android.util.Log;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Locale;
import android.database.Cursor;
import android.database.sqlite.SQLiteQueryBuilder;
public class AccountHolderDAO extends HospitalDBDAO {
private static final String WHERE_ID_EQUALS = DataBaseHelper.A_accountNumber + " =?";
public AccountHolderDAO(Context context) {
super(context);
}
public long save(AccountHolder_to acchold) {
ContentValues values = new ContentValues();
values.put(DataBaseHelper.A_accountNumber, acchold.getA_A_accountNumber());
values.put(DataBaseHelper.email, acchold.getA_email());
values.put(DataBaseHelper.username, acchold.getA_username());
values.put(DataBaseHelper.password, acchold.getA_password());
values.put(DataBaseHelper.syncedURL, acchold.getA_syncedURL());
values.put(DataBaseHelper.A_patientID, acchold.getA_A_patientID().getD_D_patientID());
return database.insert(DataBaseHelper.accountHolder_Table, null, values);
}
public long update(AccountHolder_to acchold) {
ContentValues values = new ContentValues();
values.put(DataBaseHelper.A_accountNumber, acchold.getA_A_accountNumber());
values.put(DataBaseHelper.email, acchold.getA_email());
values.put(DataBaseHelper.syncedURL, acchold.getA_syncedURL());
values.put(DataBaseHelper.D_patientID, acchold.getA_A_patientID().getD_D_patientID());
long result = database.update(DataBaseHelper.accountHolder_Table, values,
WHERE_ID_EQUALS,
new String[]{String.valueOf(acchold.getA_A_accountNumber())});
Log.d("Update Result:", "=" + result);
return result;
}
public int deleteEmployee(AccountHolder_to acchold) {
return database.delete(DataBaseHelper.accountHolder_Table, WHERE_ID_EQUALS,
new String[]{acchold.getA_A_accountNumber() + ""});
}
}
DataBaseHelper.java
package polimi.aap.yas.personalhealthrecord.db;
import android.database.sqlite.SQLiteOpenHelper;
import java.sql.Date;
import java.util.ArrayList;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.util.Log;
import android.database.sqlite.SQLiteDatabase;
public class DataBaseHelper extends SQLiteOpenHelper {
private static final String databaseName = "Hospital_db";
private static final int databaseVersion = 1;
// AccountHolder Table Information
public static final String accountHolder_Table = "accountHolder_Table";
public static final String A_accountNumber ="A_accountNumber";
public static final String email = "email";
public static final String username = "username";
public static final String password = "password";
public static final String syncedURL = "syncedURL";
public static final String A_patientID = "A_patientID";
// Patient_Demographics Table Information
public static final String Demographics_Table = "Demographics_Table";
public static final String D_patientID = "D_patientID";
public static final String lastName = "lastName";
public static final String firstName = "firstName";
public static final String dateOfBirth= "dateOfBirth";
public static final String sex = "sex";
public static final String height = "height";
public static final String weight = "weight";
public static final String address1 = "address1";
public static final String address2 = "address2";
public static final String city = "city";
public static final String state = "state";
public static final String postalCode = "postalCode";
public static final String country = "country";
public static final String tel1 = "tel1";
public static final String tel2 = "tel2";
public static final String religion = "religion";
public static final String gp = "gp";
// Measurements Table Information
private static final String Measurements_Table = "Measurements_Table";
private static final String testTime = "testTime";
private static final String testDate = "testDate";
private static final String M_accountNumber = "M_accountNumber";
private static final String testType = "testType";
private static final String glucose = "glucose";
private static final String systolic = "systolic";
private static final String diastolic = "diastolic";
private static final String author = "author";
// Log Table Information
private static final String log_Table="log_Table";
private static final String L_accountNumber= "L_accountNumber";
private static final String logDate = "logDate";
private static final String logTime = "logTime";
private static final String description= "description";
// Table Creation
public static final String CREATE_accountHolder_TABLE = "CREATE TABLE "
+ accountHolder_Table + "(" + A_accountNumber + " INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL, "
+ email + " TEXT, " + username + " TEXT, "
+ password + " TEXT, " + syncedURL + " TEXT, "
+ A_patientID + " TEXT, "
+ "FOREIGN KEY(" + A_patientID + ") REFERENCES "
+ Demographics_Table + "(D_patientID)" + ")";
public static final String CREATE_Demographics_table = "CREATE TABLE "
+ Demographics_Table + "(" + D_patientID + " TEXT PRIMARY KEY, "
+ lastName + " TEXT, " + firstName + " TEXT, "
+ dateOfBirth + " TEXT, " + sex + " TEXT, "
+ height + "TEXT," + weight +"TEXT,"
+ address1 + " TEXT, " + address2 + " TEXT, "
+ city + " TEXT, " + state + " TEXT, "
+ postalCode + " TEXT, " + country + " TEXT, "
+ tel1 + " TEXT, " + tel2 + " TEXT, "
+ religion + " TEXT, " + gp + " TEXT " + ")";
public static final String CREATE_Measurements_TABLE = "CREATE TABLE "
+ Measurements_Table + "(" + M_accountNumber + " INTEGER NOT NULL, "
+ testTime + " TEXT NOT NULL, " + testDate + " TEXT NOT NULL, "
+ testType + " TEXT, " + glucose + " TEXT, "
+ systolic + " TEXT, " + diastolic+ " TEXT, "
+ author + " TEXT, "
+ "FOREIGN KEY(" + M_accountNumber + ") REFERENCES "
+ accountHolder_Table + "(A_accountNumber) "
+ "PRIMARY KEY(" + testTime + "," + testDate + "," + M_accountNumber + ")"
+ ")";
public static final String CREATE_log_TABLE = "CREATE TABLE "
+ log_Table + "(" + L_accountNumber + " INTEGER NOT NULL, "
+ logDate + " TEXT NOT NULL, " + logTime + " TEXT NOT NULL, "
+ description + " TEXT, "
+ "FOREIGN KEY(" + L_accountNumber + ") REFERENCES "
+ accountHolder_Table + "(A_accountNumber) "
+ "PRIMARY KEY(" + logDate + "," + logTime + "," + L_accountNumber + ")"
+ ")";
private static DataBaseHelper instance;
public static synchronized DataBaseHelper getHelper(Context context) {
if (instance == null)
instance = new DataBaseHelper(context);
return instance;
}
private DataBaseHelper(Context context) {
super(context, databaseName, null, databaseVersion);
}
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
if (!db.isReadOnly()) {
// Enable foreign key constraints
db.execSQL("PRAGMA foreign_keys=ON;");
}
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_Demographics_table);
db.execSQL(CREATE_accountHolder_TABLE);
db.execSQL(CREATE_Measurements_TABLE);
db.execSQL(CREATE_log_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
signup.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://ift.tt/nIICcg"
xmlns:tools="http://ift.tt/LrGmb4"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="polimi.aap.yas.personalhealthrecord.SignUp">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:ems="10"
android:id="@+id/txtEmail_signup"
android:hint="Emial Address..."
android:width="320dp"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:maxLines="1"
android:layout_alignParentTop="true"
android:layout_alignLeft="@+id/txtPassword_Signup"
android:layout_alignStart="@+id/txtPassword_Signup" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/txtUsername_signup"
android:width="320dp"
android:hint="Username..."
android:layout_below="@+id/txtEmail_signup"
android:layout_alignLeft="@+id/txtPassword_Signup"
android:layout_alignStart="@+id/txtPassword_Signup"
android:layout_marginTop="50dp"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:maxLines="1"
/>
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:ems="10"
android:id="@+id/txtPassword_Signup"
android:hint="Password..."
android:width="320dp"
android:layout_marginTop="45dp"
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:maxLines="1"
android:layout_below="@+id/txtUsername_signup"
android:layout_alignLeft="@+id/txtPassword2_signup"
android:layout_alignStart="@+id/txtPassword2_signup" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:ems="10"
android:id="@+id/txtPassword2_signup"
android:layout_below="@+id/txtPassword_Signup"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp"
android:width="320dp"
android:hint="Re-type Password..."
android:focusable="true"
android:focusableInTouchMode="true"
android:singleLine="true"
android:maxLines="1"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnRegister_signup"
android:text="Register"
android:background="@mipmap/generalbtnimg"
android:layout_marginTop="5dp"
android:layout_centerHorizontal="true"
android:layout_weight="1"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btnRest_signup"
android:text="Reset"
android:background="@mipmap/generalbtnimg"
android:layout_marginTop="5dp"
android:layout_centerHorizontal="true"
android:layout_weight="1"
/>
</LinearLayout>
</RelativeLayout>
and the logcat is here:
12-14 11:51:03.530 7186-7186/? I/art: Not late-enabling -Xcheck:jni (already on) 12-14 11:51:03.530 7186-7186/? I/art: Late-enabling JIT 12-14 11:51:03.540 7186-7186/? I/art: JIT created with code_cache_capacity=2MB compile_threshold=1000 12-14 11:51:03.610 7186-7186/polimi.aap.yas.personalhealthrecord W/System: ClassLoader referenced unknown path: /data/app/polimi.aap.yas.personalhealthrecord-1/lib/x86_64 12-14 11:51:03.710 7186-7208/polimi.aap.yas.personalhealthrecord D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true 12-14 11:51:03.890 7186-7208/polimi.aap.yas.personalhealthrecord I/OpenGLRenderer: Initialized EGL, version 1.4 12-14 11:51:03.920 7186-7208/polimi.aap.yas.personalhealthrecord W/EGL_emulation: eglSurfaceAttrib not implemented 12-14 11:51:03.920 7186-7208/polimi.aap.yas.personalhealthrecord W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x7fb0189eccc0, error=EGL_SUCCESS 12-14 11:51:04.710 7186-7186/polimi.aap.yas.personalhealthrecord I/Choreographer: Skipped 43 frames! The application may be doing too much work on its main thread. 12-14 11:52:59.630 7186-7193/polimi.aap.yas.personalhealthrecord W/art: Suspending all threads took: 10ms 12-14 11:53:49.000 7186-7212/polimi.aap.yas.personalhealthrecord E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2 Process: polimi.aap.yas.personalhealthrecord, PID: 7186 java.lang.RuntimeException: An error occurred while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:309) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) at java.util.concurrent.FutureTask.setException(FutureTask.java:223) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Integer.intValue()' on a null object reference at polimi.aap.yas.personalhealthrecord.to.AccountHolder_to.getA_A_accountNumber(AccountHolder_to.java:54) at polimi.aap.yas.personalhealthrecord.db.AccountHolderDAO.save(AccountHolderDAO.java:27) at polimi.aap.yas.personalhealthrecord.SignUp$AddAccTask.doInBackground(SignUp.java:136) at polimi.aap.yas.personalhealthrecord.SignUp$AddAccTask.doInBackground(SignUp.java:126) at android.os.AsyncTask$2.call(AsyncTask.java:295) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818) 12-14 11:53:49.080 7186-7208/polimi.aap.yas.personalhealthrecord W/EGL_emulation: eglSurfaceAttrib not implemented 12-14 11:53:49.080 7186-7208/polimi.aap.yas.personalhealthrecord W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x7fb006efca80, error=EGL_SUCCESS 12-14 11:53:49.150 7186-7208/polimi.aap.yas.personalhealthrecord E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7fb018bda940 12-14 11:53:52.500 7186-7208/polimi.aap.yas.personalhealthrecord E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7fb007656720 12-14 11:58:49.050 7186-7212/? I/Process: Sending signal. PID: 7186 SIG: 9
AccountHolder_to.java
package polimi.aap.yas.personalhealthrecord.to;
import android.content.Intent;
import android.os.Parcel;
import android.os.Parcelable;
public class AccountHolder_to implements Parcelable {
private Integer A_A_accountNumber;
private String A_email;
private String A_username;
private String A_password;
private String A_syncedURL;
private Demographics_to A_A_patientID;
public AccountHolder_to () {
super();
}
private AccountHolder_to(Parcel in) {
super();
this.A_A_accountNumber= in.readInt();
this.A_email = in.readString();
this.A_username = in.readString();
this.A_password = in.readString();
this.A_syncedURL = in.readString();
this.A_A_patientID = in.readParcelable(Demographics_to.class.getClassLoader());
}
public int getA_A_accountNumber() {return A_A_accountNumber;}
public void setA_A_accountNumber(int id) {
this.A_A_accountNumber = id;
}
public String getA_email() {
return A_email;
}
public void setA_email(String email) {
this.A_email = email;
}
public String getA_username() {
return A_username;
}
public void setA_username(String un) {
this.A_username = un;
}
public String getA_password() {
return A_password;
}
public void setA_password(String pw) {
this.A_password = pw;
}
public String getA_syncedURL() {
return A_syncedURL;
}
public void setA_syncedURL(String sr) {
this.A_syncedURL = sr;
}
public Demographics_to getA_A_patientID() {
return A_A_patientID;
}
public void setA_A_patientID(Demographics_to pi) {
this.A_A_patientID = pi;
}
@Override
public String toString() {
return "accountHolder_Table [A_accountNumber:" + A_A_accountNumber + ", name:" + A_email
+ ",username:" + A_username + "password:" + A_password
+ "syncedurl:" +A_syncedURL +"patientid:" + A_A_patientID+ "]";
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(getA_A_accountNumber());
parcel.writeString(getA_email());
parcel.writeString(getA_username());
parcel.writeString(getA_password());
parcel.writeString(getA_syncedURL());
parcel.writeParcelable(getA_A_patientID(), flags);
}
public static final Parcelable.Creator<AccountHolder_to> CREATOR = new Parcelable.Creator<AccountHolder_to>() {
public AccountHolder_to createFromParcel(Parcel in) {
return new AccountHolder_to(in);
}
public AccountHolder_to[] newArray(int size) {
return new AccountHolder_to[size];
}
};
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + A_A_accountNumber;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
AccountHolder_to other = (AccountHolder_to) obj;
if (A_A_accountNumber != other.A_A_accountNumber)
return false;
return true;
}
}
Thank you in advance !
Aucun commentaire:
Enregistrer un commentaire