简体   繁体   中英

Trouble Displaying ListView Elements from SQLite Table

I'm struggling to pull elements from an SQLite table in Android Studio and display the elements in a ListView. The area where I believe the error to be in is when I set the List adapter to my array.

First, here is the code in my SQHelper class. It retrieves the list of items to be displayed.

 public ArrayList<Course> getCourses()
    {
        SQLiteDatabase db = this.getReadableDatabase();
        ArrayList<Course> courses = new ArrayList<>();
        Cursor cursor = null;


        cursor = db.query(TABLE_COURSE,null,null,null,null,null,null);
        if(cursor!=null)
            {
                cursor.moveToFirst();
                do {
                    int id = cursor.getInt(cursor.getColumnIndex(COLUMN_COURSE_ID));
                    String title = cursor.getString(cursor.getColumnIndex(COLUMN_COURSE_TITLE));
                    String code = cursor.getString(cursor.getColumnIndex(COLUMN_COURSE_CODE));

                    System.out.println("ID: "+id+"\nTITLE: "+title+"\nCODE"+code);

                    courses.add(new Course(id,title,code));
                    System.out.println("SUCCESFULLY ACCESSED SQ TABLE; ADDING COURSES");

                } while(cursor.moveToNext());
            }
        db.close();
 
        Log.d("SQHELPER","COURSES:");
        for(Course c : courses)
        {
            System.out.println(c.getCourseCode()+c.getCourseTitle());
        }
        return courses;
    }

NOTE that the function first prints each element that is added, then outputs the whole course list before returning it. This is important for the output of the log.

Second is the onClickListener for when one tries to add an element to this list.

saveButton.setOnClickListener(save_view ->
        {
            String title = courseTitle.getText().toString();
            String code = courseCode.getText().toString();

            SqHelper sqHelper = new SqHelper(getContext());
            sqHelper.insertCourse(new Course(-1,title,code));

            ((MainActivity)getActivity()).DisplayCourses();

            Toast.makeText(getContext(),"Saved!",Toast.LENGTH_SHORT).show();
            getDialog().dismiss();
        });

Finally, the function DisplayCourses() which is called above.

public void DisplayCourses()
{
    ArrayList<Course> courses = sqHelper.getCourses();

    courseAdapter = new ListViewAdapter(this, courses);
    listView = findViewById(R.id.course_list);
    listView.setAdapter(courseAdapter);
    ((ListViewAdapter) listView.getAdapter()).notifyDataSetChanged();
}

As mentioned, the SQHelper function displays each element as it is added, then prints the entire course array. Here is the output (LOGCAT) when I try to insert a new course.

2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: ID: 1
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: TITLE: Mini Capstone
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: CODECOEN 390
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: SUCCESFULLY ACCESSED SQ TABLE; ADDING COURSES
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: **ID: 2**
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: TITLE: fdsaf
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: CODEfdasfa
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: SUCCESFULLY ACCESSED SQ TABLE; ADDING COURSES
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: **ID: 3**
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: TITLE: fdasf
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: CODEasdfadsfa
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: SUCCESFULLY ACCESSED SQ TABLE; ADDING COURSES
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: **ID: 4**
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: TITLE: fasd
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: CODEfdjaksl;f
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: SUCCESFULLY ACCESSED SQ TABLE; ADDING COURSES
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: **ID: 5**
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: TITLE: TEST
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: CODETESTCODE
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: SUCCESFULLY ACCESSED SQ TABLE; ADDING COURSES
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: ID: 6
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: TITLE: TEST TITLE
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: CODETEST CODE
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: SUCCESFULLY ACCESSED SQ TABLE; ADDING COURSES
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: ID: 7
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: TITLE: why this no work
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: CODEwhyyyy
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: SUCCESFULLY ACCESSED SQ TABLE; ADDING COURSES
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 D/SQHELPER: COURSES:
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: **whyyyywhy this no work**
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/chatty: uid=10151(com.example.a40048841_ass3) **identical 5 lines**
2020-10-15 20:08:11.777 12875-12875/com.example.a40048841_ass3 I/System.out: **whyyyywhy this no work**

Note that as classes are added, their IDs, titles, and codes seem identical. But when the entire list is printed, they are all the same. This leads to the list looking like the following picture.

在此处输入图片说明

So to sum this up, I am trying to display a list of elements in a listView from an SQLite table. When inserting elements into the array to be passed to my adapter, the course attributes that are added somehow don't add up.

Note that the ListView adapter is not the issue; I have tested it with a hard coded list of courses, and displayed them all uniquely.

Thank you for your time!

EDIT: Here is the course class

package com.example.a40048841_ass3;

import java.util.ArrayList;
import java.util.Random;

public class Course {
    private static int courseID = 0;
    private static String courseTitle;
    private static String courseCode;
    //static ID increments with every new

    public Course(int id, String title, String code)
    {
        courseID = id;
        courseTitle = title;
        courseCode = code;
        courseID++;
    }

    //****get methods*****//
    public String getCourseTitle() {return courseTitle;}
    public String getCourseCode() {return courseCode;}
}

Posting this answer for future visitors. The issue lied in my Course class. I changed it to this, and it worked. The variables were originally declared static, which was the issue.

public class Course
{
    private long id;
    private String code;
    private String title;

    public Course(long id, String code, String title)
    {
        this.id = id;
        this.code = code;
        this.title = title;
    }

    @Override
    public String toString() { return "Course{" + "id=" + id + ", title='" + title + '\'' + ", code='" + code + '\'' + '}'; }

    public long getId() { return id; }
    public String getCode() { return code; }
    public String getTitle() { return title; }

    public void setId(long id) { this.id = id; }
    public void setCode(String code) { this.code = code; }
    public void setTitle(String title) { this.title = title; }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM