vendredi 17 juillet 2015

Trying to update listview from sqlite database

Trying to update a listview from a sqlite database in the listview activity:

The application is supposed to launch and open directly to the listview activity. Once someone clicks a button, it launches to the second activity which requires user input through edit texts. That data is then transferred to the listview activity, inserted to the sqlite database which than updates the list.

Problem: Once I enter data and then return to the listview activity, my data does not appear. Only if I go back to the user input activity, press back, and then the listview activity is updated with data. And yet when I press any of the listview items the entire application pauses and stops. Would anyone know any solutions to this problem? Please let me know if you need clarity with my problem, thanks for any help.

ListView Activity

public class ListOfAlarms extends ActionBarActivity {
    private static final int RESULT = 1000;

    List<TestAlarm> alarms;

    String title;
    String totalTime;

 ListView listOfAlarms;
    ArrayAdapter<TestAlarm> alarmArrayAdapter;
    public DatabaseHandler db;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list_of_alarms);

        db = new DatabaseHandler(this);

            alarms = db.getAllContacts();


        final TextView emptyViewForList = (TextView) findViewById(R.id.emptyTextViewForList);

       listOfAlarms = (ListView) findViewById(R.id.listView);
        alarmArrayAdapter = new ArrayAdapter<>(this,android.R.layout.simple_list_item_1, alarms);

       listOfAlarms.setAdapter(alarmArrayAdapter);

//        if(listOfAlarms.getCount() <= 0){
//            emptyViewForList.setText("No Alarms Currently Available");
//            listOfAlarms.setEmptyView(emptyViewForList);
//        }

        listOfAlarms.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {


                alarms.get(position);



                Intent clockDownActivity = new Intent(ListOfAlarms.this, CountDownAct.class);
                clockDownActivity.putExtra("Title", title);
                clockDownActivity.putExtra("totalTime", totalTime);
                startActivity(clockDownActivity);
            }
        });


    }




    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_list_of_alarms, menu);
        return true;
    }




    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public void goToFillOut(View view) {

            Intent goingToFillOut = new Intent(ListOfAlarms.this, Test.class);
        goingToFillOut.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
//        goingToFillOut.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivityForResult(goingToFillOut, RESULT);

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == RESULT && resultCode == RESULT_OK) {

            title = data.getStringExtra("title");
            totalTime = data.getStringExtra("totalTime");

            db.addContact(new TestAlarm(title,totalTime));
            //
//            alarms.add(new TestAlarm(title, totalTime));





        }
    }

//    public void printDatabase() {
//
//        String dbString = myDBHandler.databaseToString();
//
//    }

}

Second Activity

public class Test extends ActionBarActivity {
       private static final String LOGTAG = "Test.class";
    private static final long timeInterval = 1000;


    private Button complete;
    private EditText titleEditText;
    private EditText hourEditText;
    private EditText minuteEditText;
    private EditText secondEditText;
    public static   int hour;



    public static int minute;
    public static int second;
    public static String title;

    public DatabaseHandler db;

    public int actualTimeFiniliazedInMilliSeconds;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        titleEditText = (EditText) findViewById(R.id.titleEditText);
        hourEditText = (EditText) findViewById(R.id.hourEditText);
        minuteEditText = (EditText) findViewById(R.id.minuteEditText);
        secondEditText = (EditText) findViewById(R.id.secondEditText);

        complete = (Button) findViewById(R.id.completeButton);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }


    public void saveTimer(View view) {

        if(titleEditText.getText().toString().isEmpty() || hourEditText.getText().toString().isEmpty()
                || minuteEditText.getText().toString().isEmpty() || secondEditText.getText().toString().isEmpty()) {

            Toast.makeText(this, "Oops you forgot one", Toast.LENGTH_LONG).show();
            return;

        }
//            complete.setVisibility(View.GONE);
            title = titleEditText.getText().toString();
            hour = Integer.parseInt(hourEditText.getText().toString().trim());
            minute = Integer.parseInt(minuteEditText.getText().toString().trim());
            second = Integer.parseInt(secondEditText.getText().toString().trim());

            hour *= 3600000;
            minute *= 60000;
            second *= 1000;

        actualTimeFiniliazedInMilliSeconds = hour + minute + second;

        String totalTime = String.valueOf(actualTimeFiniliazedInMilliSeconds);






        Intent intent = new Intent();
        intent.putExtra("title", title);
        intent.putExtra("totalTime", totalTime);
        setResult(RESULT_OK, intent);
        finish();

    }



}

Sqlite Database Class

           public class DatabaseHandler extends SQLiteOpenHelper{

    // All Static variables
    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "contactsManager";

    // Contacts table name
    private static final String TABLE_ALARMS = "alarms";

    // Contacts Table Columns names
    private static final String KEY_ID = "id";
    private static final String KEY_NAME = "name";
    private static final String KEY_TOTALTIME = "total_time";

    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_ALARMS_TABLE = "CREATE TABLE " + TABLE_ALARMS + "("
                + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT,"
                + KEY_TOTALTIME + " TEXT" + ")";
        db.execSQL(CREATE_ALARMS_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_ALARMS);

        // Create tables again
        onCreate(db);
    }

    // Adding new contact
    public void addContact(TestAlarm alarm) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, alarm.getTitle()); // Contact Name
        values.put(KEY_TOTALTIME, alarm.getTotalTime()); // Contact Phone Number

        // Inserting Row
        db.insert(TABLE_ALARMS, null, values);
        db.close(); // Closing database connection
    }

    // Getting single contact
    public TestAlarm getAlarm(int id) {
        SQLiteDatabase db = this.getReadableDatabase();

        Cursor cursor = db.query(TABLE_ALARMS, new String[] { KEY_ID,
                        KEY_NAME, KEY_TOTALTIME }, KEY_ID + "=?",
                new String[] { String.valueOf(id) }, null, null, null, null);
        if (cursor != null)
            cursor.moveToFirst();

        TestAlarm contact = new TestAlarm(Integer.parseInt(cursor.getString(0)),
                cursor.getString(1), cursor.getString(2));
        // return contact
        return contact;
    }

    // Getting All Contacts
    public List<TestAlarm> getAllContacts() {


        List<TestAlarm> contactList = new ArrayList<TestAlarm>();
        // Select All Query
        String selectQuery = "SELECT  * FROM " + TABLE_ALARMS;

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                TestAlarm contact = new TestAlarm();
                contact.set_id(Integer.parseInt(cursor.getString(0)));
                contact.setTitle(cursor.getString(1));
                contact.setTotalTime(cursor.getString(2));
                // Adding contact to list
                contactList.add(contact);
            } while (cursor.moveToNext());
        }

        // return contact list
        return contactList;
    }

    // Getting contacts Count
    public int getContactsCount() {
        String countQuery = "SELECT  * FROM " + TABLE_ALARMS;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();

        // return count
        return cursor.getCount();
    }

    // Updating single contact
    public int updateContact(TestAlarm alarm) {

        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, alarm.getTitle());
        values.put(KEY_TOTALTIME, alarm.getTotalTime());

        // updating row
        return db.update(TABLE_ALARMS, values, KEY_ID + " = ?",
                new String[] {
                        String.valueOf(alarm.get_id())
                });
    }

    // Deleting single contact
    public void deleteContact(TestAlarm alarm) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_ALARMS, KEY_ID + " = ?",
                new String[] { String.valueOf(alarm.get_id()) });
        db.close();
    }

}

Aucun commentaire:

Enregistrer un commentaire