lundi 14 décembre 2015

Inserting a tuple in sqlite db using android studio [duplicate]

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