0

I have 3 classes: MainActivity, DBHelper (extended SQLiteOpenHelper) and Student class. In DBHelper I have methods like: addNewStudent, deleteStudent, findStudent and getAllStudents. The method "getAllStudents" return arrayList and I want to show elements of this one in the listView on the mainactivity layou but I have problem with parameter of the ArrayList. I tried on String just to understand using ArrayAdapter:

MAIN ACTIVITY

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        buttonAdd = (Button) findViewById(R.id.buttonAdd);
        editTextID = (EditText) findViewById(R.id.editTextID);
        editTextName = (EditText) findViewById(R.id.editTextName);
        listViewStudents = (ListView) findViewById(R.id.listViewStudents);
        mDBStudents = new DBhelper(this);

        // ------> this one provisional works: 
        final ArrayList<String> namesArray = new ArrayList<String>();
        namesArray.add("Hania");
        namesArray.add("Kasia");
        final ArrayAdapter<String> namesAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,namesArray);

        buttonAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               namesArray.add(editTextName.getText().toString());
               mDBStudents.addNewStudent(editTextName.getText().toString());
               listViewStudents.setAdapter(namesAdapter);



         // ------> this one using <object> parameter in the ArrayList doesn't work and my app is stopped. I tried with Log.d but how to do it correctly with objects...
        final ArrayList<Student> studentArray = new ArrayList<Student>();
        Student s1 = new Student(1, "Natalia");
        studentArray.add(s1);
        final ArrayAdapter<Student> studentAdapter = new ArrayAdapter<Student>(MainActivity.this, android.R.layout.simple_list_item_1, studentArray);

        buttonAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Student s2 = new Student(Integer.parseInt(editTextID.getText().toString()), editTextName.getText().toString());
                studentArray.add(s2);
                mDBStudents.addNewStudent(editTextName.getText().toString());
                listViewStudents.setAdapter(studentAdapter);

I want to show elements from the ArrayList which I add when I click "addStudentButton" in the ListView. Later I want t open the new Intent when I click on one positon from the listView. Do you have any suggestions what is the best way for beginner user of android? On some pages are info about using ArrayAdapter, Cursor etc. but they aren't so clarity for me

DBhelper class

public class DBhelper extends SQLiteOpenHelper {

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "studentDB.db";
    public static final String TABLE_NAME = "student";
    public static final String COLUMN_ID = "studentID";
    public static final String COLUMN_NAME = "studentName";
    //initialize the database

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

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + "("
                + COLUMN_ID + " INTEGER PRIMARY KEY,"
                + COLUMN_NAME + " TEXT " + ")");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS contacts");
        onCreate(db);
    }


    public int addNewStudent(String studentName) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(COLUMN_NAME,studentName);
        return (int) db.insert(TABLE_NAME,null, values); //???
    }


    public ArrayList<Student> getAllStudents() {
        ArrayList<Student> result = new ArrayList<>();
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor csr = db.query(TABLE_NAME,null,null,null,null,null,null);
        while (csr.moveToNext()) {
            result.add(
                    new Student(
                            csr.getInt(csr.getColumnIndex(COLUMN_ID)),
                            csr.getString(csr.getColumnIndex(COLUMN_NAME)
                            )
                    )
            );
        }
        csr.close();
        db.close();
        return result;
    }

    public Student findStudent(int studentID) {
        Student result = null;
        String whereclause = COLUMN_ID + "=?";
        String[] whereargs = new String[]{String.valueOf(studentID)};
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor csr = db.query(TABLE_NAME,null,whereclause,whereargs,null,null,null);
        if (csr.moveToFirst()) {
            result = new Student(
                    csr.getInt(csr.getColumnIndex(COLUMN_ID)),
                    csr.getString(csr.getColumnIndex(COLUMN_NAME)
                    )
            );
        }
        csr.close();
        db.close();
        return result;
    }

    public Student deleteStudent(int studentID) {
        Student result = null;
        String whereclause = COLUMN_ID + "=?";
        String[] whereargs = new String[]{String.valueOf(studentID)};

        SQLiteDatabase db = this.getWritableDatabase();
        Cursor csr = db.query(TABLE_NAME, null, whereclause, whereargs, null, null, null);
        if (csr.moveToFirst()) {
            result = new Student(
                    csr.getInt(csr.getColumnIndex(COLUMN_ID)), csr.getString(csr.getColumnIndex(COLUMN_NAME)));

            db.delete(TABLE_NAME, whereclause, whereargs);
        }
        csr.close();
        db.close();
        return result;
    }

    public boolean updateStudent(int studentID, String studentName) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues args = new ContentValues();
        args.put(COLUMN_ID, studentID);
        args.put(COLUMN_NAME, studentName);
        return db.update(TABLE_NAME, args, COLUMN_ID + "=" + ID, null) > 0;
    }
}

Student class

public class Student {

    private int studentID;
    private String studentName;

    public Student(int id, String studentName) { //konstruktor
        this.studentID = id;
        this.studentName = studentName;
    }

    public int getStudentID() {
        return studentID;
    }

    public void setStudentID(int studentID) {
        this.studentID = studentID;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }
}
Nat.Pa
  • 13
  • 3

0 Answers0