从dbHandler.java文件中获取数据但是无法在listview中显示它?

时间:2016-01-14 07:36:09

标签: android android-listview android-sqlite

我在代码中做了一些更改并且运行但是没有得到适当的输出。我创建了一个方法。

public void fetchData() {
        dbHandler = new CourseDbHandler(this,null,null,1);
        List<CreateCourse> course_data = dbHandler.getdata();
        String[] data = new String[course_data.size()];
        int i=0;
        for(CreateCourse co : course_data)
        {
            data[i] = co.getCourseSelected();
            i++;
        }
        courseList = (ListView) findViewById(R.id.CourselistView);
        courseAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
        courseList.setAdapter(courseAdapter);
        courseAdapter.notifyDataSetChanged();
     }

在这个方法中我使用了dbHandler.getdata方法,如下所示

public List<CreateCourse> getdata() throws NullPointerException {
    String dbString = "";
    String course;
    String sec;

    List<CreateCourse> list = new ArrayList<>();

    SQLiteDatabase db = getWritableDatabase();
    String query = "SELECT * FROM " + TABLE_COURSE +";";
    Cursor c = db.rawQuery(query,null);
    c.moveToFirst();

    if(c.equals(null)){
        System.out.println("NO DATA");
        return null;
    }
    else {
        do {
            course = c.getString(1);
            sec = c.getString(2);
            dbString = course+" "+sec;
            CreateCourse co = new CreateCourse();
            co.setCourseSelected(dbString);
            list.add(new CreateCourse(c.getString(1), c.getString(2)));
        }while (c.moveToNext());
    }
    db.close();
    return list;
}

这些是getter和setter方法

public void setCourseSelected(String courSelected) {
        courseSelected = courSelected;
    }

    public String getCourseSelected() {
        System.out.println(courseSelected);
        return courseSelected;
    }

出现错误不幸的是应用已停止

2 个答案:

答案 0 :(得分:0)

使用您的数据创建一个类:

public class Course {  
public String id;  
public String course;  
public String sec;  

public Course (String id, String course, String sec) {
this.id = id;
this.course = course;
this.sec = sec;
}

然后修改您的方法以返回您的数据列表:

public List<Course> getdata() throws NullPointerException {
        List<Course> list = new ArrayList<>();

        SQLiteDatabase db = getWritableDatabase();
        String query = "SELECT * FROM " + TABLE_COURSE +";";
        Cursor c = db.rawQuery(query,null);
        c.moveToFirst();

        if(c.equals(null)){
            System.out.println("NO DATA");
         return null;
        }
        else {
            do {
                list.add(new Course(c.getString(0), c.getString(1), c.getString(2)));
            }while (c.moveToNext());
        }
        db.close();
        return list;
    }

然后,您可以将此List与ArrayAdapter一起使用,以在ListView中显示您的数据。

答案 1 :(得分:0)

我在上面的代码中更改了所有代码并解决了我的问题。

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_create_course);
        dbHandler = new CourseDbHandler(this, null, null, 1);
        Cursor c = dbHandler.getData();
        c.moveToFirst();
        // System.out.println("Select");
        if(c.equals(null)){
            System.out.println("NO DATA");
            }
        else {
            if(c.moveToFirst()) {
                do {
                    dbString=null;
                    course = c.getString(1);
                    sec = c.getString(2);
                    dbString = course + " " + sec;
                    courseItem.add(dbString);
                } while (c.moveToNext());
            }
        }
        courseList = (ListView) findViewById(R.id.CourselistView);
        courseAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, courseItem);
        courseList.setAdapter(courseAdapter);
        courseAdapter.notifyDataSetChanged();
}

感谢您的帮助..