Как связать ArrayList <object>с ArrayList? - PullRequest
0 голосов
/ 08 октября 2018

У меня есть 3 класса: MainActivity, DBHelper (расширенный SQLiteOpenHelper) и класс Student.В DBHelper у меня есть методы, такие как: addNewStudent, deleteStudent, findStudent и getAllStudents.Метод «getAllStudents» возвращает arrayList, и я хочу показать элементы этого элемента в listView в слое mainacctivity, но у меня есть проблема с параметром ArrayList.Я попытался на String просто понять, используя ArrayAdapter:

ОСНОВНАЯ ДЕЯТЕЛЬНОСТЬ

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);

Я хочу показать элементы из ArrayList, которые я добавляю, когда нажимаю «addStudentButton»в ListView.Позже я хочу открыть новое намерение, когда нажимаю на одну позицию из списка.Есть ли у вас какие-либо предложения, как лучше всего для начинающих пользователей Android?На некоторых страницах есть информация об использовании ArrayAdapter, Cursor и т. Д., Но они не так ясны для меня

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;
    }
}

Студенческий класс

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;
    }
}
...